Как добавить что-то в конце определенной строки текста

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

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" - ключевое слово. (то есть я должен добавить что-то по этой ссылке по ключевому слову).

Итак, текст после script должен быть:

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', он вставляет новую строку после строки. Это не то, чего я хочу. Я хочу, чтобы он добавлялся к текущей строке.

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

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

Ответ 1

Я, вероятно, поеду на решение John 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 script следующим образом: условия слева и команды справа:

/^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/'

Ответ 2

sed '/Line2/ s/$/ Please help me/'

Ответ 3

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

while read -r line
do 
  case "$line" in
    *Line2* ) line="$line Please help me";;
  esac
  echo "$line"
done <"file" > temp
mv temp file