Linux 如何在sed中使用引号?
我怎么得到这个Linux 如何在sed中使用引号?,linux,bash,sed,alias,quotes,Linux,Bash,Sed,Alias,Quotes,我怎么得到这个 ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/' 化名 例如: alias asdf "ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'" 问题是当我找到别名的引号时。如下所示: alias asdf="ls -1 | sed 's/.*/alias & \"shot &\"/'" 您忘记了赋值运算符(=);要获得双引号中的双引号,必须使用\“对其进行转义 此外,我已将您的捕获组和反向引
ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'
化名
例如:
alias asdf "ls -1 | sed 's/\(.*\)/alias \1 "shot \1"/'"
问题是当我找到别名的引号时。如下所示:
alias asdf="ls -1 | sed 's/.*/alias & \"shot &\"/'"
您忘记了赋值运算符(=
);要获得双引号中的双引号,必须使用\“
对其进行转义
此外,我已将您的捕获组和反向引用更改为使用&
,这表示完全匹配
请注意,以编程方式处理
ls
的输出是非常困难的。例如,一个健壮的解决方案可以使用find
或fileglobs(like),但问题的重点是关于转义双引号。您错过了等号,必须转义双引号。请尝试以下操作:
别名asdf=“ls-1 | sed's/\(.*\)/alias\1\“shot\1\”/”“假设您的文件名只包含字母数字、点或下划线,您应该避免解析
ls
的输出另一个陷阱是在命令中使用管道,这将仅在子shell而不是当前shell中创建别名
您可以将此用于循环:
for f in *; do
alias $f="shot $f"
done
不要使用别名,请使用函数:
my_func() {
ls -1 | sed 's/.*/alias & "shot &"/'
}
不过,你应该这样做。请阅读链接
在您的情况下,假设文件名中没有换行符,可以使用^0:
my_func() {
printf '%s\n' * | sed 's/\(.*\)/alias \1 "shot \1"/'
}
^0,这将使您在解析ls时遇到与解析ls相同的问题,但不会调用额外的进程,因为printf是buildin。使用\返回不匹配的“”对引号进行转义。