regex - 将单词括在单引号中的 Bash 脚本

标签 regex bash

我正在尝试编写一个 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/

相关文章:

java - 正则表达式仅允许一系列 double

javascript - 如果该子字符串前面没有特定字符串并忽略整个字符串,则正则表达式匹配该子字符串?

python - 根据子字符串在日志文件中查找特定行 - Python

python - 研究 "TypeError: expected string or bytes-like object"

linux - 从 bash 并行运行多个脚本而不将输出打印到控制台

bash - 获取 bash 列中唯一值的计数

regex - 如何使用 sed 打印匹配模式

javascript - 正则表达式匹配邮政编码和第一个字符

c - 有没有办法将 stderr 重定向到在 bash、csh 和 dash 中工作的文件?

linux - 通过网络接口(interface)发送数据包(icmp 或其他),绕过路由表