只有当特定的字符序列属于引号中包含的字符串时,才需要使用sed替换文本中的字符序列。
e.g。以下文字:
这是由电影引用的YouTube视频.YouTube_id'列。
应该像这样转换:
这是由电影引用的YouTube视频.you_tube_id'列。
即。替换子串" YouTube"用" you_tube"只有当这样的子字符串是用单引号(')括起来的字符串的一部分时,无论引号中包含的前导和/或尾随字符如何。
显然
sed -r "s/YouTube/you_tube/g"
不起作用,因为它取代了" YouTube"用" you_tube"无论报价如何,无处不在。我可以使用哪个正则表达式来完成任务?
提前谢谢。
答案 0 :(得分:2)
使用GNU sed:
sed -E "s/('[^']*)YouTube([^']*')/\1you_tube\2/g" file
输出:
This is a YouTube video referenced by the 'movies.you_tube_id' column.
答案 1 :(得分:1)
关注awk
可能对您有所帮助:
awk '{sub(/\047movies.YouTube_id\047/,"\047movies.you_tube_id\047")} 1' Input_file
输出如下:
This is a YouTube video referenced by the 'movies.you_tube_id' column.
答案 2 :(得分:1)
以下是awk
解决方案:
awk 'BEGIN{FS=OFS="\047"} {
for (i=2; i<=NF; i+=2) gsub(/YouTube/, "you_tube", $i)} 1' file
This is a YouTube video referenced by the 'movies.you_tube_id' column.
Sinec我们使用单引号作为字段分隔符,每个偶数字段将为我们提供由单引号包围的引用字符串。
答案 3 :(得分:0)
如果字符串未修复(不一样),则使用环顾高级正则表达式和perl:
perl -pe "s/(?<=')(:?\w+\.)?YouTube(?=_id')/you_tube/"