我想只有在一个文本的一部分来代替空格。
我输入文字如下,
---start of text---test1 test2 test3 test4---end is here---
我想输出是,
---start of text---
test1
test2
test3
test4
---end is here---
我曾尝试下面的命令,
sed 's/start of text/start~of~text/; s/end is here/end~is~here/; s/text---/text--- /; s/---end/ ---end/' test_file | tr ' ' '\n' | sed 's/~/ /g'
这个工作,但为了这个,我有硬编码的开始和文本行结束。有没有什么办法可以规避这一点,我试图在AWK使用GSUB,但没有奏效。
可否请您尝试以下(考虑到你的INPUT_FILE是同出样品)。
awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2 OFS ORS $3 ORS OFS $(NF-1) OFS}' Input_file
要么
awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2,ORS $3 ORS,$(NF-1) OFS}' Input_file
输出将是如下。
---start of text---
test1
test2
test3
test4
---end is here---
随着GNU sed的,可以在启动后的文本和文本之间的结尾文本,然后循环使用t
命令用换行来代替空格前添加一个换行符:
sed -E "s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/;:a;s/(\n[^ ]*) (.*\n)/\1\n\2/;ta;" file
说明:
s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/
:使用反向引用,添加一个换行符---start of text---
后一个---end is here---
前:a;s/(\n[^ ]*) (.*\n)/\1\n\2/
)\n
:一个循环来处理剩余空间。 \n[^ ]*
是一个sed测试命令之前替换命令成功时循环到ta
标签