我试图在myURL =“different_text_capitalized”的文本文件中替换所有出现的myURL =“不同文本大写”,并且两者之间的文本在每种情况下都不同。缠绕我的头很困难。这是我到目前为止所做的:
sed -i "s/myURL\".*\"/myUrl\"$VAROFSOMEKIND/g" file.text
答案 0 :(得分:0)
至少使用GNU sed(“-i
”选项隐含使用),您可以使用“\L
”进行大小写转换。
sed -i 's/myURL="\([^"]*\)"/myURL="\L\1"/g' file.text
如果在同一行上有其他材料并且其中包含空格,则只需在URL文本上替换下划线的空格(或者我的大脑已经冻结)相当困难。
我可能会使用Perl:
#!/bin/perl -p
if (m/(.*myURL=")([^"]*)(".*)/)
{
my($bow, $mid, $aft) = ($1, lc($2), $3);
$mid =~ s/ /_/g;
$_ = "$bow$mid$aft\n";
}
这有点接近臭名昭着的Perl'线噪声',但是......
-p
'表示Perl读取一行,在其上执行脚本,然后打印结果;该行将被读入$_
。$_
。答案 1 :(得分:0)
这个怪物只适用于每一行的第一个URL(Jonathan Leffler的sed
命令也是如此 - 但g
修饰符会修复他的)。它会将一对引号之间的文本更改为小写,并将下划线替换为:
sed 's/myURL="\([^"]*\)"/myURL="\L\n\1\n"/;h;s/[^\n]*\n\([^\n]*\)\n.*/\1/;s/ /_/g;x;G;s/\([^\n]*\)\n[^\n]*\n\([^\n]*\)\n\(.*\)/\1\3\2/' inputfile