我可以使用sed在bash中操作变量吗?
在我的程序中,我希望首先获得用户输入,然后在每个我可以使用sed在bash中操作变量吗?,bash,replace,sed,Bash,Replace,Sed,在我的程序中,我希望首先获得用户输入,然后在每个/之前插入一个\ 所以我写了这个,但它不起作用 echo "input a website" read website sed '/\//i\/' $website 试试这个: website=$(sed 's|/|\\/|g' <<< $website) 说明: website=${website // / / \\/} ^ ^ ^ ^ | |
/
之前插入一个\
所以我写了这个,但它不起作用
echo "input a website"
read website
sed '/\//i\/' $website
试试这个:
website=$(sed 's|/|\\/|g' <<< $website)
说明:
website=${website // / / \\/}
^ ^ ^ ^
| | | |
| | | string, '\' needs to be backslashed
| | delimiter
| pattern
replace globally
或者,为了更好的可读性:
echo $website | sed 's|/|\\/|g'
还可以使用替换变量中的子字符串。
例如:
website="https://stackoverflow.com/a/58899829/658497"
echo "${website//\//\\/}"
https:\/\/stackoverflow.com\/a\/58899829\/658497
它也很好用。请您解释一下这个's/\/\\\//g'和这个's |/\\/\/\\/|g'?
searchreplacecommand | source | target | global(所有匹配)
,在这里您可以使用任何字符作为分隔符(
)。传统上,/
用于分隔符,但当我使用“”和变量时。它没有插入任何内容。你能找出原因吗?感谢这不会将修改后的内容保存回变量本机版本不适用于大变量内容命令变长:
Eugene,非常感谢您对sed的哪个部分做了什么进行了详细分析。这是迄今为止我所看到的最清楚的解释。投票支持难以置信的细节,特别是。“\”需要反斜杠。
echo $website | sed 's|/|\\/|g'
website="https://stackoverflow.com/a/58899829/658497"
echo "${website//\//\\/}"