我希望在匹配模式时按sed
执行两项操作:
例如文本文件中的原始内容是:
abc
123
edf
我想将123
替换为XXX
并在该行后添加YYY
:
abc
XXX
YYY
edf
我试图通过sed '/123/{s/123/XXX;a\YYY\}'
执行此操作,但它出错:Unmatched "{"
。
似乎命令a
将其后的所有字符视为 要追加的文字 。那么如何让a
知道 文字的结尾位置 ?
答案 0 :(得分:2)
使用实际换行符(使用GNU Sed 4.2.2测试):
sed '/123/ {
s/123/XXX
a\YYY
}' < $input_file
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed '/123/c\XXX\nYYY' file
这使用c
命令来更改模式匹配的行。
或者如果您愿意替换并追加:
sed 's/123/XXX/;T;a\YYY' file
或者:
sed -e '/123/{s//XXX/;a\YYY' -e '}' file
或者:
sed $'/123/{s//XXX/;a\YYY\n}' file
答案 2 :(得分:1)
在bash
中,这可能是使用sed
的最简单的:
sed -e $'s/123/XXX\\nYYY/' file
来自bash
男人:
$'string'形式的单词是专门处理的。这个词扩大了 to string,反斜杠转义字符被替换为 ANSI C标准
示例强>
$ sed -e 's/123/XXX\\nYYY/' file
abc
XXX\nYYY
edf
但是$'string'
会产生:
$ sed -e $'s/123/XXX\\nYYY/' file
abc
XXX
YYY
edf
答案 3 :(得分:0)
$ sed 's/123/XXX\'$'\nYYY/' a
abc
XXX
YYY
def
$
WHERE ...
$ cat a
abc
123
def
$