我有一个包含此标题FIELD1 FIELD2 : 0x30070040
和许多垃圾字符的文件(文件大小的一半)。为了摆脱所有这些,我执行以下命令:
dos2unix -q -n file
sed -i $'s/[^[:print:]\t]//g' file #Removing every non-printable character (yes, dos2unix was not enough)
但后来我最终得到了一个包含这个奇怪标题的文件。如果我从 shell 复制并粘贴它,它看起来像这样:
PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobody▒▒FIELD1 FIELD2 : 0x30070040
如果我从像 VIM 这样的文本编辑器复制和粘贴,它看起来像这样:
PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobodyÿþFIELD1 FIELD2 : 0x30070040
请注意 FIELD1 之前的两个特殊字符。
现在我想得到这样的标题:
FIELD1 FIELD2
FIELD1
保留介于两者之间的所有内容也很重要,FIELD2
因为那是文件的字段分隔符。我考虑过使用这个:
sed -i -r '1 s/.+(FIELD1.+) : 0x.+/\1/g' file
但显然与or.+FIELD1
不匹配(无论哪个是真实的),所以我无法从正则表达式中提取。PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobody▒▒FIELD1
PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobodyÿþFIELD1
\1
不应该.
匹配每个字符?为什么它与之前的内容不匹配FIELD1
?