Regex sed将线连接在一起
要将文件中不以字符“0”结尾的行连接在一起,sed(或其他工具)命令是什么 我要这样的台词 这需要单独处理,然后我会有这样的线,例如(这是3行,但只有一端是w/0) 需要连接/组合成一条线的Regex sed将线连接在一起,regex,linux,sed,Regex,Linux,Sed,要将文件中不以字符“0”结尾的行连接在一起,sed(或其他工具)命令是什么 我要这样的台词 这需要单独处理,然后我会有这样的线,例如(这是3行,但只有一端是w/0) 需要连接/组合成一条线的 如果以0存储结束,请删除换行符 sed '/0$/!N;s/\n//' 典型的隐晦Perl单行程序: perl -pe 'BEGIN{$/="0\n"}s/\n//g;$_.=$/' 这使用序列“0\n”作为记录分隔符(根据您的问题,我假设每一行都应该以零结尾)。然后,任何记录都不应具有内部换行符,因此
如果以0存储结束,请删除换行符
sed '/0$/!N;s/\n//'
典型的隐晦Perl单行程序:
perl -pe 'BEGIN{$/="0\n"}s/\n//g;$_.=$/'
这使用序列“0\n”作为记录分隔符(根据您的问题,我假设每一行都应该以零结尾)。然后,任何记录都不应具有内部换行符,因此这些换行符将被删除,然后打印该行,并附加已删除的0和换行符
另一个问题是确保每条管线有17个管道分隔字段。这并不假定第17个字段值必须为零
awk -F \| '
NF == 17 {print; next}
prev {print prev $0; prev = ""}
{prev = $0}
'
在循环中(将ba
分支到标签:a
),如果当前行以0(/0$/
)结尾,则追加下一行(N
)并删除内部换行符(s/\N/
)
awk:
awk '{while(/0$/) { getline a; $0=$0 a; sub(/\n/,_) }; print}'
perl -pe '$_.=<>,s/\n// while /0$/'
while read line; do
if [ ${line: -1:1} != "0" ] ; then
echo $line
else echo -n $line
fi
done
Perl:
awk '{while(/0$/) { getline a; $0=$0 a; sub(/\n/,_) }; print}'
perl -pe '$_.=<>,s/\n// while /0$/'
while read line; do
if [ ${line: -1:1} != "0" ] ; then
echo $line
else echo -n $line
fi
done
awk也可能很短:
awk '!/0$/{printf $0}/0$/'
测试:
这一评级令人惊讶;s
(sed替换上这个令人惊讶的眨眼表情双关语是故意的)给定OP规范:
这是最后的评论
“如果是这样,请检查@ninjalj提交的内容” 还建议检查一下 即:使用
sed:a进行检查/0$/{N;s/\N//;ba}'
逐字记录
sed ':a;/0$/{N;s/\n//;ba}'
does
no one
ie. 0
people,
try
nothing,
ie. 0
things,
any more,
ie. 0
tests?
(^D aka eot 004 ctrl-D ␄ ... bash generate via: echo ^V^D)
不会给出(做测试;):
要获得此用途,请执行以下操作:
sed 'H;${z;x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
或:
不是:
注:
sed 'H;${x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
不使用分支和与以下内容相同:
sed '${H;z;x;s/\n//g;p;};/0$/!{H;d;};/0$/{H;z;x;s/\n//g;}'
开始所有序列H
短路当前行上的进一步脚本命令执行,并开始下一个循环,以便在d
/0$/之后执行地址选择器代码>只能是
/0$/代码>因此
是冗余的,不需要/0$/{H;z;x;s/\n//g;}
- 如果行未以0结尾,则将其保存在保留空间中
/0$/!{H;d;}
- 如果一行以0结尾,则也保存该行,然后进行同调打印(双字节即清除并对齐行)
/0$/{H;z;x;s/\n//g;}
- NB
使用带有额外${H;z;x;s/\n//g;p;}
的p
命令强制最终打印,并使用现在不必要的/0$/…
(清空和重置模式空间,如s/*/)z
sed'/my pattern/{N;s/\N/;}'
Hi!你能简单描述一下它是如何工作的吗?:)这是非常简单的哪一部分你有问题去理解?嗯:(1)那是什么命令,有四个斜杠?(2) 最后的“0$”部分是如何工作的?(3) 一般来说,如何搜索此命令的文档在使用此命令将近一个小时后,您能否确认以下解释:对于结尾没有0的每一行,打印该行(不带换行符)。然后,另一个正则表达式开始:对于每一个末尾有0的行,不要触摸它(这会导致“正常打印它,包括它的换行符”)
sed 'H;${z;x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
sed ':a;/0$/!{N;s/\n//;ba}'
sed ':a;/0$/{N;s/\n//;ba}'
sed 'H;${x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
sed '${H;z;x;s/\n//g;p;};/0$/!{H;d;};/0$/{H;z;x;s/\n//g;}'