我正在尝试使用unix sed命令查找与特定正则表达式匹配的行号。我的文件格式在
之下A<20 spaces>
<something>
<something>
..
..
A<20 spaces>
<soemthing>
<something>
我需要A<20 spaces>
我使用sed -n '/A[ ]{20}/'= <file_name>
但它不起作用。如果我手动输入二十个空格就可以了。
有人可以调整上面的命令使其正常工作。
答案 0 :(得分:5)
表达式中的大括号需要使用反斜杠进行转义:
% sed -n '/A[ ]\{20\}/=' test.txt
1
6
另一种方法是使用-E
将正则表达式解释为扩展(现代)正则表达式:
% sed -nE '/A[ ]{20}/=' test.txt
1
6
或者可能使用grep
代替相同的搜索:
% grep -n 'A[ ]\{20\}' test.txt
答案 1 :(得分:1)
正确的语法是/A \{20\}/
(而且我无法理解你的语法来自哪里)。
编辑:重复一个空格,而不是A
。不是我的一天
答案 2 :(得分:0)
使用-E
或-r
开关进行扩展正则表达式
答案 3 :(得分:0)
只是为了满足内容请求的回答,因为它高度意味着“20个空格”而不是Twenty“”字符,每个人都理解由于sed行示例失败(我猜这是好的,所以其他回复都很好)这个案例)
sed -n "/<20 spaces>/ =" file_name