How to append something at the end of a certain li

2019-03-25 09:19发布

I want to append something at the end of a certain line(have some given character). For example, the text is:

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.

Then I want to add "Please help me" at the end of

Line2:  Thanks to all who look into my problem

And "Line2" is the key word. (that is I have to append something by grep this line by key word).

So the text after the script should be:

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.

I know sed can append something to certain line but, if I use sed '/Line2/a\Please help me', it will insert a new line after the line. That is not what I want. I want it to append to the current line.

Could anybody help me with this?

Thanks a lot!

标签: shell sed awk
3条回答
Explosion°爆炸
2楼-- · 2019-03-25 09:34

I'd probably go for John's sed solution but, since you asked about awk as well:

$ 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}'

This outputs:

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.

An explanation as to how it works may be helpful. Think of the awk script as follows with conditions on the left and commands on the right:

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

These two awk clauses are executed for every single line processed.

If the line matches the regular expression ^Line2: (meaning "Line2:" at the start of the line), you change $0 by appending your desired string ($0 is the entire line as read into awk).

If the line matches the empty condition (all lines will match this), print is executed. This outputs the current line $0.

So you can see it's just a simple program which modifies the line where necessary and outputs the line, modified or not.


In addition, you may want to use /^Line2:/ as the key even for a sed solution so you don't pick up Line2 in the middle of the text or Line20 through Line29, Line200 through Line299 and so on:

sed '/^Line2:/s/$/ Please help me/'
查看更多
一夜七次
3楼-- · 2019-03-25 09:47

Shell scripting

while read -r line
do 
  case "$line" in
    *Line2* ) line="$line Please help me";;
  esac
  echo "$line"
done <"file" > temp
mv temp file
查看更多
forever°为你锁心
4楼-- · 2019-03-25 09:51
sed '/Line2/ s/$/ Please help me/'
查看更多
登录 后发表回答