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或空字符串)替换为换行符。
以下对我来说很好:
$ sed 's/|END|/\
/g' foobar
T|somthing|something
T|something2|something2
Run Code Online (Sandbox Code Playgroud)
请注意,我只是放了一个反斜杠,然后是回车键。
您可以使用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重建$0OFS1是一个真值,导致awk打印整个输入行