Linux sed未找到';0A';控制字符
该文件包含一个回车行馈送序列十六进制'DA'。Hexedit清楚地显示了两个十六进制字符Linux sed未找到';0A';控制字符,linux,sed,Linux,Sed,该文件包含一个回车行馈送序列十六进制'DA'。Hexedit清楚地显示了两个十六进制字符 20 0D 0A 31 及 清楚地识别了线路 然而 找不到任何行 使用sed删除“0D”后,为了使其更有趣,在字符串中找不到“0A”: 20 0A 31 如何使用sed删除特定字符串后的0D0A。该文件在特定文本后有多余的换行符。这将在应有一条线的位置创建两条线。目标是从两个中重新创建一个 sed逐行读取输入;行之间用\x0a分隔 您可以改为使用Perl,-0777读取整个文件,而不是逐行读取: per
20 0D 0A 31
及
清楚地识别了线路
然而
找不到任何行
使用sed删除“0D”后,为了使其更有趣,在字符串中找不到“0A”:
20 0A 31
如何使用sed删除特定字符串后的0D0A。该文件在特定文本后有多余的换行符。这将在应有一条线的位置创建两条线。目标是从两个中重新创建一个
sed
逐行读取输入;行之间用\x0a
分隔
您可以改为使用Perl,-0777
读取整个文件,而不是逐行读取:
perl -0777 -pe 's/\x0d\x0a//'
在
sed
中,与python不同,换行符\n
被视为行分隔符,而不是任何行的一部分。如果要修改换行符,请立即读入整个文件,然后进行替换:
sed 'H;1h;$!d;x; s/something\n/somethingelse/g'
工作原理
sed
既有一个模式空间(新读行的位置)又有一个保持空间。这些命令将新读取的行附加到保持空间,直到到达最后一行。然后,整个文件被传输到模式空间,您可以根据需要对其执行任何命令。详细内容:
-追加当前行以保留空格H
-如果这是第一行,覆盖保留空间 用它1h
-如果这不是最后一行,请删除图案空间 然后跳到下一行$!d
-交换保留空间和模式空间以放入整个文件 模式空间x
让我们考虑这个示例文件:
$ cat file
Try to av-
oid word
splits.
现在,让我们将任何以连字符结尾的行与下面的行合并:
$ sed 'H;1h;$!d;x; s/-\n//g' file
Try to avoid word
splits.
或者,如果您喜欢十六进制形式:
$ sed 'H;1h;$!d;x; s/-\x0a//g' file2
Try to avoid word
splits.
. 通常使用
dos2unix
@KarolyHorvath良好技巧,但OP希望“删除特定字符串后的0D0A[仅]”
$ sed 'H;1h;$!d;x; s/-\n//g' file
Try to avoid word
splits.
$ sed 'H;1h;$!d;x; s/-\x0a//g' file2
Try to avoid word
splits.