как насчет этого? это правильно для вашего вопроса?
sed -r 's/m([^s])/MS\1/Ig' file
Есть много способов снять шкуру с этого кота.
С grep
(grep -E
и egrep
также будут работать, но здесь работает базовый grep
):
grep '^hghgh' /path/to/input
С sed
:
sed -n '/^hghgh/p' /path/to/input
sed '/^hghgh/!d' /path/to/input
С awk
:
awk '/^hghgh/' /path/to/input
Что является сокращением от:
awk '/^hghgh/ { print $0 }' /path/to/input
Или
awk 'index($0, "hghgh") == 1' /path/to/input
Или
awk 'substr($0, 1, 5) == "hghgh"' /path/to/input
Это сделало бы это:
grep '^hghgh' txt.txt
egrep
— это просто grep -E
(точно так же, как fgrep
— это grep -F
), но -E
здесь не нужен, так как нам не нужно использовать расширенные регулярные выражения.
(Основное) регулярное выражение ^hghgh
соответствует литеральной строке hghgh
в начале строки. Это ^
, который привязывает шаблон к началу строки.
Если вы хотите сопоставить exact строку hghgh
в начале строки, а не, например. hghghaaaaaa
(где hghgh
— подстрока), затем используйте \>
или \b
или [[:>:] ]
в конце выражения, чтобы соответствовать концу этого слова:
grep '^hghgh\>' txt.txt
Или используйте awk
и выполните сравнение строк с первым полем:
awk '$1 == "hghgh"' txt.txt