我正在努力学习sed,遇到这样的情况
$ echo "abcd" | sed -n "/b/p"
abcd
它工作正常,
$ echo "abcd" | sed -n "
→ /b/p"
abcd
又好了,但是
$ echo "Abcd" | sed -n "/b
/p"
sed: -e expression #1, char 2: unterminated address regex
错误报告有什么问题?
答案1
/b/p
是一个完整的 sed 命令。每个 sed 命令都需要位于一行上。当您/b
在一行上输入时,sed 会将其视为语法错误。你可以尝试通过
echo "abcd" | sed -n "/b"
并查看结果。你也可以尝试
echo "abcd" | sed -n "/b/p
> p"
并观察该命令完成后,下一条命令生效。
答案2
sed
模式基本上是基于行的,因此它期望第二个斜杠与第一个斜杠位于同一行。从info sed
:
SCRIPT 或 SCRIPT-FILE 中的命令可以用分号 (';') 或换行符 (ASCII 10) 分隔。
答案3
Linux 中的大多数命令基本上都是基于行的,因此它期望第二个斜杠与第一个斜杠位于同一行。如果您要为第三个工作,您可以使用以下内容
$ echo "Abcd" | sed -n "/b\
/p"
Abcd