0

我有一个包含此标题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▒▒FIELD1PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobodyÿþFIELD1\1

不应该.匹配每个字符?为什么它与之前的内容不匹配FIELD1

4

0 回答 0