[英]Bash script to enclose words in single quotes
我正在尝试编写一个 bash 脚本来用单引号将文件中包含的单词括起来。
词 - 你好089
结果 - 'Hello089',
我尝试了以下正则表达式,但它不起作用。 这适用于带有查找和替换的 Notepad++。 我不确定如何对其进行调整以使其在 bash 脚本中工作。
sed "s/(.+)/'$1',/g" file.txt > result.txt
替换反向引用(也称为占位符)是用\n
语法定义的,而不是$n
(这是类似于 perl 的反向引用语法)。
但是请注意,这里不需要组,因为您想用单引号将整行括起来。 这也是您不需要g
标志的原因,它们仅在您计划在同一行查找多个匹配项时才需要,输入字符串。
您可以使用以下 POSIX BRE 和 ERE(带有-E
的那个)解决方案:
sed "s/..*/'&',/" file.txt > result.txt
sed -E "s/.+/'&',/" file.txt > result.txt
在 POSIX BRE(第一个)解决方案中, ..*
匹配任何字符,然后匹配任何 0 个或多个字符(因此模拟.+
常见的 PCRE 模式)。 POSIX ERE(第二个)解决方案使用.+
模式来做同样的事情。 右侧的&
用于插入整个匹配项(又名\0
)。 当然,您可以用捕获括号将整个匹配括起来,然后使用\1
,但这是多余的:
sed "s/\(..*\)/'\1',/" file.txt > result.txt
sed -E "s/(.+)/'\1',/" file.txt > result.txt
请参阅 escaping,必须转义 POSIX BRE 中的捕获括号。
请参阅在线sed
演示。
s="Hello089";
sed "s/..*/'&',/" <<< "$s"
# => 'Hello089',
sed -E "s/.+/'&',/" <<< "$s"
# => 'Hello089',
$1
在sed
看到它之前由 shell 扩展,但无论如何它都是错误的反向引用。 你需要\1
。 您还需要转义定义捕获组的括号。 因为sed
脚本用双引号括起来,所以您需要转义所有反斜杠。
$ echo "Hello089" | sed "s/\\(.*\\)/'\1',/g"
'Hello089',
(我不记得是否有一种方法可以使用 ASCII 代码而不是文字来指定单引号'
,这将允许您在脚本周围使用单引号。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.