如何用新行替换单词

Sas*_*Sas 19 sed text-processing regular-expression newlines

我有一个包含以下数据的文本文件,每一行都以|END|.

T|somthing|something|END|T|something2|something2|END|
Run Code Online (Sandbox Code Playgroud)

我tryig更换|END|与\n新行的sed。

 sed 's/\|END\|/\n/g' test.txt
Run Code Online (Sandbox Code Playgroud)

但它产生如下错误输出:

 T
 |
 s
 o
 m
 e
 ...
Run Code Online (Sandbox Code Playgroud)

但我想要的是这个:

T|somthing|something
T|something2|something2
Run Code Online (Sandbox Code Playgroud)

我也尝试过tr。它也没有用。

A.B*_*.B. 21

用这个:

sed 's/|END|/\n/g' test.txt
Run Code Online (Sandbox Code Playgroud)

您尝试的操作不起作用,因为 sed 使用基本正则表达式,并且您的 sed 实现具有一个\|表示“或”的运算符(BRE 的常见扩展),因此您编写的内容将(空字符串END或空字符串)替换为换行符。


unx*_*nut 7

以下对我来说很好:

$ sed 's/|END|/\
/g' foobar
T|somthing|something
T|something2|something2
Run Code Online (Sandbox Code Playgroud)

请注意,我只是放了一个反斜杠,然后是回车键。

  • 这是标准语法。使用 `\n` [如@AB 的回答](http://unix.stackexchange.com/a/194051) 不适用于某些 `sed` 实现。 (3认同)

cuo*_*glm 5

您可以使用awk:

$ awk -F'\\|END\\|' '{$1=$1}1' OFS='\n' file
T|somthing|something
T|something2|something2
Run Code Online (Sandbox Code Playgroud)
  • -F'\\|END\\|' 将字段分隔符设置为 |END|
  • OFS='\n' 将输出字段分隔符设置为换行符
  • $1=$1使用作为字段分隔符的原因awk重建$0OFS
  • 1是一个真值,导致awk打印整个输入行