【发布时间】:2013-06-14 23:29:02
【问题描述】:
您好:我有很多文件名为 test-MR3000-1.txt 到 test-MR4000-1.nt,其中名称中的数字更改了 100(即我有 11 个文件),
$ ls test-MR*
test-MR3000-1.nt test-MR3300-1.nt test-MR3600-1.nt test-MR3900-1.nt
test-MR3100-1.nt test-MR3400-1.nt test-MR3700-1.nt test-MR4000-1.nt
test-MR3200-1.nt test-MR3500-1.nt test-MR3800-1.nt
还有一个名为resonancia.kumac 的文件,其中的几行包含字符串XXXX。
$ head resonancia.kumac
close 0
hist/delete 0
vect/delete *
h/file 1 test-MRXXXX-1.nt
sigma MR=XXXX
我想执行一个bash 文件,它将文件中的字符串XXXX 替换为从命令ls *MR* | cut -b 8-11 获得的一组数字。
我找到了a post,其中有一些建议。我尝试自己的代码
for i in `ls *MR* | cut -b 8-11`; do
sed -e "s/XXXX/$i/" resonancia.kumac >> proof.kumac
done
但是,在替换中,数字被单引号包围(例如'3000')。
问:如何避免数字集中出现单引号?谢谢。
【问题讨论】:
-
永远不要以这种方式使用 ls。见mywiki.wooledge.org/ParsingLs
-
...另外,您没有以让其他人重现它的方式描述您的问题,所以我看不出任何人可以帮助您解决它。有人需要知道您正在使用的文件名、输入文件的实际内容、您获得的实际输出等。如果您可以提供一个独立的脚本来创建必要的文件和输入,然后用这些文件和输入重现问题它创建的输入 - 因此,从无到有重现问题的东西 - 这将是有帮助的。
-
您提供的代码不会插入单引号,对我来说效果很好。请复制粘贴此代码并重试,不要对您提到的帖子进行任何临时更改。
-
@Dox 虽然原始代码没有您在此处询问的错误,但它确实有其他错误。请考虑利用此处提供的改进。
标签: linux bash loops sed do-loops