Unix SED替换两个已知单词之间的空格和大写
我试图将文本文件中所有出现的myURL=“different text Capitalized”替换为myURL=“different\u text\u Capitalized”,并且两者之间的文本在每种情况下都是不同的。我的头绕不住它。以下是我目前掌握的情况:Unix SED替换两个已知单词之间的空格和大写,unix,sed,Unix,Sed,我试图将文本文件中所有出现的myURL=“different text Capitalized”替换为myURL=“different\u text\u Capitalized”,并且两者之间的文本在每种情况下都是不同的。我的头绕不住它。以下是我目前掌握的情况: sed -i "s/myURL\".*\"/myUrl\"$VAROFSOMEKIND/g" file.text 使用GNU sed(其使用由“-i”选项暗示),您至少可以使用“\L”进行大小写转换 sed -i 's/myURL=
sed -i "s/myURL\".*\"/myUrl\"$VAROFSOMEKIND/g" file.text
使用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“行噪声”,但是
- “
”意味着Perl读取一行,在其上执行脚本,并打印结果;该行被读入-p
$\u
- 正则表达式将行拆分为三段;“myURL=”后双引号内的材料;双引号内的材料;以及收盘后的材料双引号(不包括换行符)
- 三元组赋值为三个匹配的部分命名,但在此过程中将中间部分转换为小写
- 替换项在中间部分用下划线替换空格
- 作业将所有内容重新粘在一起,恢复掉的新行
- Perl会自动打印出
$\uuuz
sed
命令也是如此-但是g
修饰符会修复他的URL)。它会将一对引号之间的文本更改为小写,并用下划线替换以下空格:
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
@丹尼斯;谢谢,我认为应该适当修改Perl脚本(一个是循环,另一个是正则表达式上的一些修饰)。