在 sed 中的变量后追加文本
Append text after a variable in sed
我有一些使用 GNU-parallel 的代码,它应该用 vclist_2d_*.txt
形式的一系列字符串替换输入文件中的文本,其中 *
是 1 到 10000 之间的数字。
FILES=(vclist_2d_*.txt)
parallel -j1 '
sed -i "s/50pc\/vclist_2d_.*/50pc\/{}'\''/" 1759_input.py
sed -i "s/schedule_analysis\/vclist_2d_.*/schedule_analysis\/{}'\_temp\/1759_cs_output.spc''\''/" 1759_input.py
' ::: ${FILES[@]}
第一个 sed
命令成功将 1759_input
中已有的 vclist_2d_*
文件替换为 {}
定义的列表 FILES
中的下一个文件.但是,第二个 sed
命令需要替换 vclist_2d_*
并附加文本 _temp/1759_cs_output.spc'
但是,使用上面的代码会发生两件事:
vclist
名称永远不会被列表中的下一个替换
- 文本
.temp/1759_cs_output.spc
被附加而不是 _temp/1759_cs_output.spc
我已经尝试了上述 none 的几种变体,其中成功了。我不确定为什么这对第一个 sed
有效但对第二个无效。我想也许 _
需要转义,但这没有帮助。
我不太明白你用单引号做什么:我假设你的正则表达式模式太贪婪,你需要添加一个被消耗的引号。我会将 .*
更改为 [^']0
—— 即零个或多个非引号字符。
您所做的工作是所需工作量的两倍:将两个替换放入单个 sed 调用中
parallel -j1 '
sed -i "
s@\(50pc\)/vclist_2d_[^'\'']*@/{}@
s@\(schedule_analysis\)/vclist_2d_[^'\'']*@/{}_temp/1759_cs_output.spc@
" 1759_input.py
' ::: "${FILES[@]}"
我为 s///
命令使用了不同的定界符以减少反斜杠
我有一些使用 GNU-parallel 的代码,它应该用 vclist_2d_*.txt
形式的一系列字符串替换输入文件中的文本,其中 *
是 1 到 10000 之间的数字。
FILES=(vclist_2d_*.txt)
parallel -j1 '
sed -i "s/50pc\/vclist_2d_.*/50pc\/{}'\''/" 1759_input.py
sed -i "s/schedule_analysis\/vclist_2d_.*/schedule_analysis\/{}'\_temp\/1759_cs_output.spc''\''/" 1759_input.py
' ::: ${FILES[@]}
第一个 sed
命令成功将 1759_input
中已有的 vclist_2d_*
文件替换为 {}
定义的列表 FILES
中的下一个文件.但是,第二个 sed
命令需要替换 vclist_2d_*
并附加文本 _temp/1759_cs_output.spc'
但是,使用上面的代码会发生两件事:
vclist
名称永远不会被列表中的下一个替换- 文本
.temp/1759_cs_output.spc
被附加而不是_temp/1759_cs_output.spc
我已经尝试了上述 none 的几种变体,其中成功了。我不确定为什么这对第一个 sed
有效但对第二个无效。我想也许 _
需要转义,但这没有帮助。
我不太明白你用单引号做什么:我假设你的正则表达式模式太贪婪,你需要添加一个被消耗的引号。我会将 .*
更改为 [^']0
—— 即零个或多个非引号字符。
您所做的工作是所需工作量的两倍:将两个替换放入单个 sed 调用中
parallel -j1 '
sed -i "
s@\(50pc\)/vclist_2d_[^'\'']*@/{}@
s@\(schedule_analysis\)/vclist_2d_[^'\'']*@/{}_temp/1759_cs_output.spc@
" 1759_input.py
' ::: "${FILES[@]}"
我为 s///
命令使用了不同的定界符以减少反斜杠