Linux 在“上执行grep”;NAK";性格

Linux 在“上执行grep”;NAK";性格,linux,grep,Linux,Grep,我正在尝试对包含“NAK”字符()的文件执行grep 当我用vi打开文件时,这个NAK字符显示为“^U”。我尝试了grep^U myfile.csv,但不起作用 你知道我如何在grep命令中识别这个字符来匹配它吗 #od -c can identify those non-printable character and represent them in octal echo "$line"| od -c; 我尝试了grep^U myfile.csv,但不起作用 要grep Control-

我正在尝试对包含“NAK”字符()的文件执行grep

当我用vi打开文件时,这个NAK字符显示为“^U”。我尝试了
grep^U myfile.csv
,但不起作用

你知道我如何在grep命令中识别这个字符来匹配它吗

#od -c can identify those non-printable character and represent them in octal

echo "$line"| od -c;
我尝试了
grep^U myfile.csv
,但不起作用


要grep Control-U字符,您不能键入图形表示^U作为图案;请键入文本控件-U。要执行此操作,必须在其前面加上带引号的insert special key Control-V,i。E键入Ctrl-VCtrl-U。

让我们制作一个小文件,其中包含前128个ASCII代码,以供演示:

perl -e 'for($i=0;$i<128;$i++){printf("%c",$i)}' > someFile
00000010:10111214161718191B1B1C1C1D1B1B1B1B1B1F1F1F1F1F1F

现在你可以看到它和周围的人物。为了更清楚一点,让我们假设您正在寻找
a
,它是十六进制41:

xxd -g1 a | grep "\b41\b"
00000040: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  @ABCDEFGHIJKLMNO
现在,您可以在第三个字段中看到
41
,也可以在该行末尾(右侧)的ASCII部分中看到围绕
A
的字母


另一种方法将查找
NAK
,但可能输出混乱的控制字符,如我在注释中所述:

grep -a $'\x15' someFile

搜索控制字符时的另一个“技巧”是将它们转换为其他字符,然后查找该字符。因此,选择一些在文件中不经常出现的内容,可能是
|
#
,将您的NAK转换为该内容,然后搜索该内容

作为一个具体示例,让我们将麻烦的NAK转换为管道符号
|
,然后搜索:

tr '\015' '|' < YourFile | grep -a '|'

你是说
grep-a$'\x15'someFile
?是的,但是这个表示法是针对java或Python()的,不是吗?它是针对
bash
shell的。只需按Ctrl-V键,然后按Ctrl-U键(Ctrl意味着按控制键,同时按V键或U键)Ctrl-V是shell接受下一个字符作为文本的前缀,并立即按下第二个字符。如何将八进制(或十六进制或十进制)表示法与grep命令一起使用?
grep -a $'\x15' someFile
tr '\015' '|' < YourFile | grep -a '|'
tr '\006\015' '<>' < YourFile | grep -Ea '<|>'