我试过了sed -ne '/\"/!p' theinput > theproduct
但这让我无处可去。它没有做任何事情。我该怎么办?
答案 0 :(得分:3)
您无需逃避报价。写:
sed '/"/d' theinput > theproduct
或
sed -i '/"/d' theinput
直接改变文件。
如果你有@Jonathan Leffler建议的其他报价,你必须找出哪些。然后,使用\ x,您可以实现您想要的。 \ x用于指定十六进制值。
sed -i '/\x22/d' theinput
上面的行将删除包含普通(ASCII 34)引号的输入中的所有行。你必须尝试Jonathan建议的代码点。
答案 1 :(得分:1)
试试这个:
grep -v '"' theinput > theproduct
答案 2 :(得分:1)
你向我们展示的命令应该有效。
$ cat theinput
foo"bar
foo.bar
$ sed -ne '/\"/!p' theinput > theproduct
$ cat theproduct
foo.bar
$
除非您使用csh或tcsh作为交互式shell。在这种情况下,您需要转义!
字符,即使在引号内也是如此:
% cat theinput
foo"bar
foo.bar
% sed -ne '/\"/!p' theinput > theproduct
sed -ne '/"/pwd' theinput > theproduct
sed: -e expression #1, char 5: extra characters after command
% rm theproduct
% sed -ne '/\"/\!p' theinput > theproduct
% cat theproduct
foo.bar
%
但这与你的陈述“它没有做任何事情”不一致,所以不清楚究竟发生了什么(并且问题标记为bourne-shell无论如何)。
但是有更简单的方法可以完成相同的任务,尤其是@Mike Sokolov建议的grep
命令。
答案 3 :(得分:1)
您确定要输入'ASCII'吗?你有Unicode(UTF-8)的字符不是ASCII 34,还是Unicode U + 0022,还有别的吗?
替代Unicode'双引号'可以是:
您可以使用od
命令来调试它:
$ cat theinput
No double quote here
Double quote " here
Unicode pseudo-double-quotes include “”‟″˝.
$ od -c theinput
0000000 N o d o u b l e q u o t e
0000020 h e r e \n D o u b l e q u o t
0000040 e " h e r e \n U n i c o d e
0000060 p s e u d o - d o u b l e - q
0000100 u o t e s i n c l u d e “ **
0000120 ** ” ** ** ‟ ** ** ″ ** ** ˝ ** . \n
0000136
$ od -x theinput
0000000 6f4e 6420 756f 6c62 2065 7571 746f 2065
0000020 6568 6572 440a 756f 6c62 2065 7571 746f
0000040 2065 2022 6568 6572 550a 696e 6f63 6564
0000060 7020 6573 6475 2d6f 6f64 6275 656c 712d
0000100 6f75 6574 2073 6e69 6c63 6475 2065 80e2
0000120 e29c 9d80 80e2 e29f b380 9dcb 0a2e
0000136
$ odx theinput
0x0000: 4E 6F 20 64 6F 75 62 6C 65 20 71 75 6F 74 65 20 No double quote
0x0010: 68 65 72 65 0A 44 6F 75 62 6C 65 20 71 75 6F 74 here.Double quot
0x0020: 65 20 22 20 68 65 72 65 0A 55 6E 69 63 6F 64 65 e " here.Unicode
0x0030: 20 70 73 65 75 64 6F 2D 64 6F 75 62 6C 65 2D 71 pseudo-double-q
0x0040: 75 6F 74 65 73 20 69 6E 63 6C 75 64 65 20 E2 80 uotes include ..
0x0050: 9C E2 80 9D E2 80 9F E2 80 B3 CB 9D 2E 0A ..............
0x005E:
$ sed '/"/d' theinput > theproduct
$ cat theproduct
No double quote here
Unicode pseudo-double-quotes include “”‟″˝.
$
(odx
是我自己的以十六进制转储数据的命令。)