shell - 如何在循环中替换文件中的字符串并运行命令
问题描述
我想替换一个名为的文件中的一行link.j
并在它之后运行一个程序,当程序完成后,我想再次运行它,但是对link.j
文件进行不同的替换,就像在循环中对我指定的所有值一样。
所以为了替换我所做的一行
sed -i '' -e '3 s/0.5/0.1/' link.j
然后运行
copy.sh
所以我将第三行的值替换为0.5
to 0.1
。现在我想继续这样做,但是对于从0.1
到1.0
间隔的值0.1
,所以0.1,0.2...1.0
,并且总是在之后运行代码。
我运行的代码将我刚刚修改的文件复制到一个新的子文件夹中,因此我想在再次运行替换之前保存这些文件夹。
copy.sh 脚本如下所示
for dir in `ls -d ../files/files-12/??`
do
id=`echo $dir | awk -F/ '{print $4}'`
mkdir $id
cp ../stack/*/${id}/rf* .
done
解决方案
您可以像这样遍历可能的替换字符串:
for n in 0.{1..9} 1.0; do
sed -i '' -e "3 s/0\.5/$n/" link.j
./copy.sh
done
请注意,我已经逃脱了0.5
; 否则,它将匹配任何字符。
大括号扩展是一种 Bashism;如果你不使用 Bash,你可能有seq
(也是非 POSIX):
for n in $(seq 0.1 0.1 1.0); do
对于 POSIX 合规性,您可以使用 awk:
for n in $(awk 'BEGIN { for (i = 0.1; i <= 1.0; i += 0.1) print i }'); do
推荐阅读
- r - 如何删除/删除ggplot2中条形和面板之间的空间?
- html - 使用“ ”更改图像的位置
- javascript - 无法将 Vuetify 连接到项目
- python - 如何计算主导频率在python中使用numpy.fft
- r - 博客下载 GitHub 问题
- logging - Splunk 从数组字段中提取所有值
- list - 这是给定嵌套结构 [SICP] 的正确表示形式吗?我错过了什么?
- swift - 如果在swift中“允许一次”,如何仅获取当前位置坐标
- angular - PrimeNG - TreeNode - 通过点击任何地方来扩展它,而不仅仅是在图标上
- etl - 如何使用 talend 将 json api 加载到数据库中