Вы можете использовать
awk '{sub(/[[:punct:]]+$/, "", $2);print "#"$2}' file > newfile
См. Онлайн-демонстрацию .
Операция sub(/[[:punct:]]+$/, "", $2)
удаляет 1 или более знаков препинания ([[:punct:]]+
) изконец ($
) поля 2 и print "#"$2
добавляет к нему #
и печатает его.
Чтобы получить слово после Hello
, вы можете использовать
cat file | grep -Po 'Hello\s+\K\w+' | awk '{print "#"$0}'
См. онлайн-демо
Или, с помощью sed
:
sed 's/.*Hello \([[:alnum:]]*\).*/#\1/' file > newfile
См. другое демо .
Здесь .*Hello \([[:alnum:]]*\).*
соответствует любым 0+ символам, затем Hello
, пробелу, затем захватывает 0 или более буквенно-цифровых символов в Группу 1 (\1
) и затем соответствует остальной части строки.Шаблон #\1
в RHS оставляет только то, что было снято с #
впереди.
Другое решение с awk
с .
и /
в качестве разделителей полей с использованием -F'[/.]'
:
awk -F'[/.]' '{for(i=1;i<=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file
См. онлайн-демонстрацию
Здесь for(i=1;i<=NF;i++)
перечисляет все поля, и если поле равно 54517334
, следующее поле с#
перед началом печатается.