Как добавить что-либо в конец определенной строки текста - PullRequest
12 голосов
/ 24 августа 2010

Я хочу добавить что-то в конце определенной строки (иметь определенный символ). Например, текст:

Line1:  I just want to make clear of the problem
Line2:  Thanks to all who look into my problem
Line3:  How to solve the problem?
Line4:  Thanks to all.

Тогда я хочу добавить «Пожалуйста, помогите мне» в конце

Line2:  Thanks to all who look into my problem

И "Line2" - ключевое слово. (то есть я должен добавить что-то, grep этой строки по ключевому слову).

Таким образом, текст после сценария должен быть:

Line1:  I just want to make clear of the problem
Line2:  Thanks to all who look into my problem Please help me
Line3:  How to solve the problem?
Line4:  Thanks to all.

Я знаю, sed может добавить что-то к определенной строке, но, если я использую sed '/Line2/a\Please help me', она вставит новую строку после строки. Это не то, что я хочу. Я хочу добавить его к текущей строке.

Может ли кто-нибудь помочь мне с этим?

Большое спасибо!

Ответы [ 3 ]

15 голосов
/ 24 августа 2010

Я бы, вероятно, выбрал решение Джона sed, но, поскольку вы также спросили о awk:

$ echo 'Line1:  I just want to make clear of the problem
Line2:  Thanks to all who look into my problem
Line3:  How to solve the problem?
Line4:  Thanks to all.' | awk '/^Line2:/{$0=$0" Please help me"}{print}'

Это выдает:

Line1:  I just want to make clear of the problem
Line2:  Thanks to all who look into my problem Please help me
Line3:  How to solve the problem?
Line4:  Thanks to all.

Объяснение каккак это работает, может быть полезно.Представьте себе скрипт awk следующим образом с условиями слева и командами справа:

/^Line2:/ {$0=$0" Please help me"}
          {print}

Эти два предложения awk выполняются для каждой обрабатываемой строки.

Еслистрока соответствует регулярному выражению ^Line2: (что означает «Line2:» в начале строки), вы изменяете $0, добавляя желаемую строку ($0 - это вся строка, прочитанная в awk).

Если строка соответствует пустому условию (все строки будут соответствовать этому), print выполняется.Это выводит текущую строку $0.

Таким образом, вы можете видеть, что это просто простая программа, которая изменяет строку в случае необходимости и выводит строку, измененную или нет.


В дополнениевы можете использовать /^Line2:/ в качестве ключа даже для sed решения, чтобы не набирать Line2 в середине текста или от Line20 до Line29, Line200 до Line299 и так далее:

sed '/^Line2:/s/$/ Please help me/'
7 голосов
/ 24 августа 2010
sed '/Line2/ s/$/ Please help me/'
3 голосов
/ 24 августа 2010

Сценарии оболочки

while read -r line
do 
  case "$line" in
    *Line2* ) line="$line Please help me";;
  esac
  echo "$line"
done <"file" > temp
mv temp file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...