当前一行没有以点结束时,我试图用单个空格替换换行符。
我的意思是,这个输入:
hello.
stack.
overflow
friends.
this
is
a.
test.
输出这个:
hello.
stack.
overflow friends.
this is a.
test.
我尝试过类似的事情:
sed 's/[^\.] *\\\n */ /g' input.txt
但似乎我无法匹配此案例中的换行符。而且我不知道如何排除这一点,因此它也不会被替换。
修改
通过此输入,所发布的解决方案均无效。
我做cat -vte
让你知道没有任何奇怪的特征:
[jmrodriguez@zlpre1 ~]$ cat -vte /home/jmrodriguez/copytso.txt
01 WE-ENTRADA. $
03 WE-WILL-ROCK1 PIC X(6). $
03 WE-WILL-ROCK2 PIC X(3). $
03 WE-WILL-ROCK3 PIC X(7). $
03 WE-WILL-ROCK4 $
PIC S9(11)V99 COMP-3. $
03 WE-WILL-ROCK5 PIC S9(11)V99 COMP-3. $
03 MUST-WORKS PIC S9(11)V99 COMP-3. $
03 HELLO PIC S9(11)V99 COMP-3. $
03 ALL PIC S9(11)V99 COMP-3. $
03 YOU PIC S9(11)V99 COMP-3. $
03 FRIENDS PIC S9(11)V99 COMP-3. $
03 LOL PIC S9(11)V99 COMP-3. $
答案 0 :(得分:2)
你可以通过负面的背后隐藏在Perl中执行此操作。
perl -pe 's/(?<!\.)\n/ /g' file
OR
如果要在匹配的换行符后删除以下空格,请尝试以下操作。
$ perl -00pe 's/(?<!\.)\n\s*/ /g' file
hello.
stack.
overflow friends.
this is a.
test.
答案 1 :(得分:2)
使用sed:
sed ':l /[^.] *$/{N;s/ *\n */ /; bl}' input
输出:
hello.
stack.
overflow friends.
this is a.
test.
答案 2 :(得分:1)
使用此awk
:
awk 'p{sub(/^ */, "")} !/\. *$/{p=p $0 " "; next} {print p $0; p=""}' file
hello.
stack.
overflow friends.
this is a.
test.
答案 3 :(得分:0)
这也很方便(如果你可以使用额外的点):
$ awk '{gsub("\n| *"," ");print $0RS}' RS='.' infile
hello.
stack.
overflow friends.
this is a.
test.
.
答案 4 :(得分:0)
sed -n ':load
$ !{N;b load
}
s/\([^.]\)\(\n\)/\1/g
p' YourFile
首先预加载文件,而不是一次更改所有非点结束行
答案 5 :(得分:0)
使用xargs和awk
xargs | awk 'BEGIN{FS=".";OFS=".\n"}{$1=$1;print $0}'
答案 6 :(得分:0)
这可能适合你(GNU sed):
sed ':a;N;s/\([^.]\)\n/\1 /;ta;P;D' file
保持2行的滚动窗口,并检查它们的交叉点是否为非周期。