我在files.txt中有一个文件列表,这是一个非常简化的例子
$FOO%foo\bar\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\biz.asmx
我希望在App_Code
文件的路径中插入.asmx
,如:
$FOO%foo\bar\App_code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx
虽然我在一个Windows框上,但我有gnuwin32,它给了我sed / awk / grep和其他花哨的东西。
我没有坚持一个特定的解决方案,但我对启蒙运动的sed / awk路线感兴趣
我试过了:
sed "s/\\([:alnum:]*)\.asmx/App_Code\/{1}/"
我原本以为会在.asmx
之后的路径分隔符(文件名)之后捕获任何字母数字字符,然后将其替换为`App_Code {group of group}。
因为它永远找不到我想要的东西所以有些东西是关闭的我对这些文档和示例很感兴趣,建议和指导将不胜感激。
答案 0 :(得分:2)
在Windows上引用是一件很痛苦的事情,因此请将以下脚本放入名为appcode.awk
的文件中:
BEGIN {
FS=OFS="\\"
}
$NF~/[.]asmx/{
$NF = "App_code" OFS $NF
}
{
print
}
运行如下:
$ awk -f appcode.awk file
$FOO%foo\bar\App_code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_code\biz.asmx
答案 1 :(得分:1)
使用awk
awk -F\\ '/\.asmx/ {$NF="App_Code\\"$NF}1' OFS=\\ file
$FOO%foo\bar\App_Code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx
答案 2 :(得分:1)
使用sed
:
sed -r 's/(\\\w+\.asmx)/\\App_Code\1/' files.txt
输出:
$FOO%foo\bar\App_Code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx
修改强>
根据sudo_O的建议,可以删除捕获组,并且可以在同一命令中使用&
。
sed -r 's/\\\w+\.asmx/\\App_Code&/' files.txt