我正在尝试编写一个 bash 脚本,用单引号将文件中包含的单词括起来。
Word - Hello089
Result - '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
参见转义,捕获POSIX BRE中的括号必须转义。
请参阅online sed
demo .
s="Hello089";
sed "s/..*/'&',/" <<< "$s"
# => 'Hello089',
sed -E "s/.+/'&',/" <<< "$s"
# => 'Hello089',
关于regex - 将单词括在单引号中的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65005046/