【问题标题】:Arguments inside sed loopsed循环内的参数
【发布时间】:2013-01-02 08:27:05
【问题描述】:

我试图理解 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

请告诉我这里的错误是什么?

【问题讨论】:

    标签: linux bash loops sed


    【解决方案1】:

    问题是变量没有在单引号' 内展开。改用双引号 ":

    # 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
    

    【讨论】:

      【解决方案2】:

      您可能会发现使用-x 设置运行此脚本很有用,可以查看实际发生的情况。 (只需set -x。)

      但坦率地说,您的$i 在单引号内,所以它不会被扩展。

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        相关资源
        最近更新 更多