sed 删除特定行的行尾

Tom*_*ino 5 sed awk text-processing

我试图找到 sed 命令来删除行尾(意思是,将下一行移到当前行),但前提是行以字符串 NOTOK 开头。

示例输入:

   NOTOK something detected
        details are                : some info
Run Code Online (Sandbox Code Playgroud)

输出应该是:

NOTOK something detected        details are                : some info
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

sed '/NOTOK/ { N; s/\n// }'
Run Code Online (Sandbox Code Playgroud)

如果您的 sed 实现不支持;分隔命令(GNU sed支持,但它不是标准的):

sed -e '/^NOTOK/ {' -e 'N' -e 's/\n//' -e '}'
Run Code Online (Sandbox Code Playgroud)

Sed 很快变得神秘;任何比一个或多个s命令更复杂的东西都是 awk 的好选择。

awk '/^NOTOK/ {printf "%s", $0; next} 1 {print}'
Run Code Online (Sandbox Code Playgroud)

或者

awk '/NOTOK/ {getline n; $0 = $0 n} 1'
Run Code Online (Sandbox Code Playgroud)


gle*_*man 3

使用 awk:

awk '$1 == "NOTOK" {printf "%s", $0; next} 1' file
Run Code Online (Sandbox Code Playgroud)