1

文件内容:

abc def
ijk lmn
opq rst
uvw xyz
sed '/\(.*\)def/{N;s/\(.*\)def\n\(.*\)lmn/Replaced\nSuccess/}' file

输出:

Replaced
Success
opq rst
uvw xyz

按预期工作。

但是对于文件内容:

2013-09-17-01:02:43 User: ID_123456@some.tld
2013-09-17-01:02:43 Last login time: Never
hello
how are you
catch up tmrw
sed '/\(.*\)tld/{N;s/\(.*\)tld\n\(.*\)Never/Replaced\nSuccess/}' file

这行不通。

预期输出:

Replaced
Success
hello
how are you
catch up tmrw

问题出在哪里?

4

2 回答 2

1

你写的方式确实有效。为了使其更具可读性,这也有效。

sed '/.*tld/{N;s/.*tld\n.*Never/Replaced\nSuccess/}' file
于 2013-09-17T16:43:09.503 回答
1

确保您的文件以 LF 而不是 CRLF 结尾。在使用 sed 运行它之前尝试使用 dos2unix 运行它。

dos2unix file

或者完全去掉它的尾随空格(包括\r

sed -i 's/[[:space:]]*$//' file
于 2013-09-17T16:48:13.103 回答