bash - and - grep awk sed三剑客



如何使用sed或awk添加到包含模式的行的末尾? (4)

在bash中:

while read -r line ; do
    [[ $line == all:* ]] && line+=" anotherthing"
    echo "$line"
done < filename

这里是示例文件:

somestuff...
all: thing otherthing
some other stuff

我想要做的就是添加到以all:开头的行all:像这样:

somestuff...
all: thing otherthing anotherthing
some other stuff

如果符合条件,您可以在awk中将文本附加到$0

awk '/^all:/ {$0=$0" anotherthing"} 1' file

说明

  • /patt/ {...}如果该行匹配patt给出的模式,则执行{}描述的操作。
  • 在这种情况下: /^all:/ {$0=$0" anotherthing"}如果行开始(用^表示),则用all: anotherthing然后将anotherthing附加到行。
  • 1作为真实条件,触发awk的默认操作:打印当前行( print $0 )。 这将始终发生,所以它会打印原始行或修改过的行。

测试

对于您给定的输入,它会返回:

somestuff...
all: thing otherthing anotherthing
some other stuff

请注意,您也可以提供要添加到变量中的文本:

$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff

这对我有用

sed '/^all:/ s/$/ anotherthing/' file

第一部分是找到的模式,第二部分是使用$作为行结尾的普通sed的替换。

如果您想在此过程中更改文件,请使用-i选项

sed -i '/^all:/ s/$/ anotherthing/' file

或者你可以将它重定向到另一个文件

sed '/^all:/ s/$/ anotherthing/' file > output

这应该适合你

sed -e 's_^all: .*_& anotherthing_'

使用s命令(替代)可以搜索满足正则表达式的行。 在上面的命令中, &代表匹配的字符串。





awk