sed:添加一个不寻常的 header 带引号

sed: add an unusual header with quotes

我有以下变量:

STR1="CD45RA_naive"
STR2="CD45RO_mem"
STR3="CD127_Treg"
STR4="IL17_Th_stim_MACS"
STR5="IL17_Th17_stim"
names=($STR1 $STR2 $STR3 $STR4 $STR5)

以及与具有“.bed”扩展名的变量同名的文件。 在每个文件中我需要添加以下 header:

track name='enhancer region' description='${names[$i]}'"

我的想法如下:

for ((i=0; i<${#names[@]}; i++))
do
    echo "output/annotation/"${names[$i]}".bed"

    sed -i '' "1 i \track name='enhancer region' description='"${names[$i]}"'" "output/annotation/"${names[$i]}".bed"

done

但是我得到一个错误:

sed: 1: "1 i \track name='enhanc ...": extra characters after \ at the end of i command

将相应的 header 添加到每个文件 (gawk,sed) 的正确方法是什么?

您通常需要为 i 命令插入的行单独占一行。换句话说,您需要在反斜杠后添加一个换行符。例如:

$ cat input
line 1
$ sed -e '1i\
foo' input
foo
line 1
$ sed -e '1i\ foo' input
sed: 1: "1i\ foo
": extra characters after \ at the end of i command