我正在编写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个反斜杠获得所需的输出。
答案 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
或您喜欢的任何内容。