我试图了解sed命令和循环。 我需要参考文本的一部分(20行)并将其附加到文件名的csv。 这是我的代码
for i in ~/mspl/*.doc
do
catdoc "$i" > auto.txt
sed -e '1,20!d' auto.txt > auto1.txt
sed -e '1s/^/"$i" ;/' auto1.txt > auto2.txt
sed -e '20s/$/~/' auto2.txt > auto3.txt
cat auto3.txt >> lines.csv
done
问题是我的第二个“i”参数没有转换为csv中的文件名。
在
行sed -e '1s/^/"$i" ;/' auto1.txt > auto2.txt
请告诉我这里的错误是什么?
答案 0 :(得分:5)
问题是变量不会在单引号'
内扩展。请使用双引号代替"
:
# this is assuming you did want to add explicit " around your $i
sed -e "1s/^/\"$i\" ;/" auto1.txt > auto2.txt
如果双引号字符串需要包含显式双引号,则必须将它们转义(\"
)。如果使用双引号不是一个选项(例如,如果你有一个非常复杂的命令已经有多个引用级别),你可以随时退出变量的引号:
sed -e '1s/^/"'$i'" ;/' auto1.txt > auto2.txt
答案 1 :(得分:1)
您可能会发现使用-x
设置运行此脚本非常有用,以查看实际发生的情况。 (只需set -x
。)
但是直言不讳,发生的事情是你的$i
在单引号内,所以它不会扩展。