bash - sed:仅当包含在引号中时才替换文本中的字符串

标签 bash sed

仅当特定字符序列属于引号中包含的字符串时,我才需要使用 sed 替换文本中的字符序列。

例如以下文字:

This is a YouTube video referenced by the 'movies.YouTube_id' column.

应该这样转换:

This is a YouTube video referenced by the 'movies.you_tube_id' column.

即仅当子字符串是用单引号 (') 括起来的字符串的一部分时,才将子字符串“YouTube”替换为“you_tube”,而不管引号中的前导和/或尾随字符。

显然

sed -r "s/YouTube/you_tube/g"

不起作用,因为无论引号如何,它都将“YouTube”替换为“you_tube”。我可以使用哪个正则表达式来完成任务?

提前谢谢你。

最佳答案

使用 GNU sed:

sed -E "s/('[^']*)YouTube([^']*')/\1you_tube\2/g" file

输出:

This is a YouTube video referenced by the 'movies.you_tube_id' column.

关于bash - sed:仅当包含在引号中时才替换文本中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48772986/

相关文章:

bash - 在 emacs 中编辑 shell 脚本时可以使用 bash 自动完成功能吗?

linux - 检查固定宽度文件的记录长度

regex - 使用正则表达式查找多个文件扩展名的命令

regex - 匹配数字的正则表达式

linux - sed 正则表达式不贪心?

bash - 找出哪个 shell tcsh/bash/etc。在脚本上使用 eval 时正在运行

bash - 无法打印句点千位分隔符

awk - grep:在特定列中保留具有特定字符串的行

linux - 使用 Awk 将服务器名称从列表传递到 nslookup

bash - 如何在单列中使用 "sed"