sed从变量中删除一个反斜杠

时间:2016-08-24 18:59:21

标签: bash sed

我正在编写bash脚本,我有一个变量

TYPE="type=\$(echo \"\$type\" | sed 's|/|\\/|g' )"

我想插入文本文件

尝试使用sed

插入第15行
sed -i "15i$TYPE"  filename

应该插入文件的行应该是

type=$(echo "$type" | sed 's|/|\\/|g' )

但我得到了:

type=$(echo "$type" | sed 's|/|\/|g' )

缺少一个反斜杠,如何使用2个反斜杠获得所需的输出。

4 个答案:

答案 0 :(得分:1)

使用here-doc避免不必要的转义:

read -r TYPE <<-'EOF'
type=$(echo "$type" | sed 's|/|\\\\/|g' )
EOF

请记住,您需要为每个\\输入\

然后将其用作:

sed -i "15i$TYPE" filename

答案 1 :(得分:0)

你在双引号内得到一个反斜杠 - 只需使用两对

TYPE="type=\$(echo \"\$type\" | sed 's|/|\\\\/|g' )"

答案 2 :(得分:0)

变量TYPE没有得到双重反弹:

$ TYPE="type=\$(echo \"\$type\" | sed 's|/|\\/|g' )"
$ echo "$TYPE"
type=$(echo "$type" | sed 's|/|\/|g' )

有几种方法可以使TYPE中的值包含正确的字符串:

  • 将每个必需的\转换为转义的\\个:

    $ TYPE="type=\$(echo \"\$type\" | sed 's|/|\\\\/|g' )"; echo "$TYPE"
    type=$(echo "$type" | sed 's|/|\\/|g' )
    
  • 使用单引号作为外部容器:

    $ TYPE='type=$(echo "$type" | sed '\''s|/|\\/|g'\'' )'; echo "$TYPE"
    type=$(echo "$type" | sed 's|/|\\/|g' )
    
  • 使用printf作为帮助者:

    $ printf -v TYPE '%s' 'type=$(echo "$type" | sed '\''s|/|\\/|g'\'' )'; echo "$TYPE"
    type=$(echo "$type" | sed 's|/|\\/|g' )
    
  • 使用C字符串样式:

    $ TYPE=$'type=$(echo "$type" | sed \047s|/|\\\\/|g\047';echo "$TYPE"
    type=$(echo "$type" | sed 's|/|\\/|g'
    
  • 或使用读取的-r选项以避免转换\\

    $ read -r TYPE <<\EOF
    > type=$(echo "$type" | sed 's|/|\\/|g'
    > EOF
    
    $ echo "$TYPE"
    type=$(echo "$type" | sed 's|/|\\/|g'
    

答案 3 :(得分:0)

使用bash将变量$ type='a/b/c' $ type="${type//\//\\}" $ echo "$type" a\b\c 更改为$ cat file a b c d 只是:

$ awk 'BEGIN{var=ARGV[1]; ARGV[1]=""} NR==3{print var}1' 'type="${type//\//\\}"' file
a
b
type="${type//\//\\}"
c
d

$ var='type="${type//\//\\}"' awk 'NR==3{print ENVIRON["var"]}1' file
a
b
type="${type//\//\\}"
c
d

即。不需要sed。如果你想在一个文件中添加一行代码:

3

然后就是这些:

15

将上面的print (pd.crosstab([df.id, df.group], df.term)) term term1 term2 term3 id group 1 1 2 1 0 2 0 1 0 2 2 1 0 1 3 1 0 0 更改为df.groupby(['id', 'group', 'term'])['term'].size().unstack(fill_value=0) term term1 term2 term3 id group 1 1 2 1 0 2 0 1 0 2 2 1 0 1 3 1 0 0 或您喜欢的任何内容。