如何在 Bash shell 中使用 GNU sed 只获取带有单引号的行?
How to get only lines with a single quote using GNU sed in Bash shell?
我正在编写一个脚本来解析一个文本文件(多行)。我只需要打印符合以下模式的行:
- 该行的第一个字符是大写字母
- 该行的第二个字符是小写字母或单引号
- 该行的第三个字符是小写字母或 space
"valid" 行的例子
- Abcd
- A'cd
- Ab c
尝试在 Linux
上使用 GNU sed 4.2.2
I ] 第一次尝试(逃跑)
$ html2text foo.html | sed -r "/^([A-Z][a-z\'])/!d"
产生以下错误消息:
html2text foo.html | sed -r "/^([A-Z][a-z\'])/date"
sed: -e expression n°1, character 19: extra characters after command
II ] 第二次尝试(没有转义)
$ html2text foo.html | sed -r "/^([A-Z][a-z'])/!d"
产生以下错误消息:
html2text foo.html | sed -r "/^([A-Z][a-z'])/date"
sed: -e expression n°1, character 18: extra characters after command
我不太确定如何处理范围内的单引号“'”。我知道根本不支持在单引号 sed 表达式中转义单引号,但这里两个 sed 表达式都是双引号。
奇怪的是错误消息 return ".../date"(错误消息的第一行)似乎是错误或解析问题("/!d" 标志被误解) ...
注意:html2text 将 'foo.html' 转换为文本文件。 sed -r 选项代表扩展正则表达式。 "[A-Z]" 匹配一个字符范围(方括号在这里不是文字)
感谢您的帮助
正如 casimir-et-hippolyte 所指出的,这里使用 grep 更简单:
grep "^[A-Z][a-z'][a-z ]"
或使用 sed:
sed -n "/^[A-Z][a-z'][a-z ]/p"
如果您出于某种原因需要使用单引号,这可以用来转义脚本中的单引号
sed -n '/^[A-Z][a-z'"'"'][a-z ]/p'
我正在编写一个脚本来解析一个文本文件(多行)。我只需要打印符合以下模式的行:
- 该行的第一个字符是大写字母
- 该行的第二个字符是小写字母或单引号
- 该行的第三个字符是小写字母或 space
"valid" 行的例子
- Abcd
- A'cd
- Ab c
尝试在 Linux
上使用 GNU sed 4.2.2I ] 第一次尝试(逃跑)
$ html2text foo.html | sed -r "/^([A-Z][a-z\'])/!d"
产生以下错误消息:
html2text foo.html | sed -r "/^([A-Z][a-z\'])/date"
sed: -e expression n°1, character 19: extra characters after command
II ] 第二次尝试(没有转义)
$ html2text foo.html | sed -r "/^([A-Z][a-z'])/!d"
产生以下错误消息:
html2text foo.html | sed -r "/^([A-Z][a-z'])/date"
sed: -e expression n°1, character 18: extra characters after command
我不太确定如何处理范围内的单引号“'”。我知道根本不支持在单引号 sed 表达式中转义单引号,但这里两个 sed 表达式都是双引号。
奇怪的是错误消息 return ".../date"(错误消息的第一行)似乎是错误或解析问题("/!d" 标志被误解) ...
注意:html2text 将 'foo.html' 转换为文本文件。 sed -r 选项代表扩展正则表达式。 "[A-Z]" 匹配一个字符范围(方括号在这里不是文字)
感谢您的帮助
正如 casimir-et-hippolyte 所指出的,这里使用 grep 更简单:
grep "^[A-Z][a-z'][a-z ]"
或使用 sed:
sed -n "/^[A-Z][a-z'][a-z ]/p"
如果您出于某种原因需要使用单引号,这可以用来转义脚本中的单引号
sed -n '/^[A-Z][a-z'"'"'][a-z ]/p'