我可以使用 sed 来操作 bash 中的变量吗?
Posted
技术标签:
【中文标题】我可以使用 sed 来操作 bash 中的变量吗?【英文标题】:Can I use sed to manipulate a variable in bash? 【发布时间】:2011-10-08 07:27:18 【问题描述】:在我的程序中,我想先获取用户输入,然后在每个/
之前插入一个\
所以我写了这个,但它不起作用。
echo "input a website"
read website
sed '/\//i\/' $website
【问题讨论】:
【参考方案1】:试试这个:
website=$(sed 's|/|\\/|g' <<< $website)
Bash 实际上支持这种替换 natively:
$parameter/pattern/string
— 将pattern
的第一个匹配项替换为string
。$parameter//pattern/string
— 将pattern
的所有匹配项替换为string
。
因此你可以这样做:
website=$website////\\/
解释:
website=$website // / / \\/
^ ^ ^ ^
| | | |
| | | string, '\' needs to be backslashed
| | delimiter
| pattern
replace globally
【讨论】:
原生版本不适用于我的变量内容很大command to long:
Eugene,非常感谢您详细说明 sed 的哪个部分做了什么。这是我迄今为止看到的最清楚的解释。
为难以置信的细节点赞,尤其是。 '\' needs to be backslashed
【参考方案2】:
echo $website | sed 's/\//\\\//g'
或者,为了更好的可读性:
echo $website | sed 's|/|\\/|g'
【讨论】:
它也很好用。你介意解释一下这个's/\//\\\//g'和这个's|/|\\/|g'吗??searchreplacecommand|source|target|global(all matches)
可以使用任何字符作为分隔符 (|
)。传统上/
用于分隔符
但是当我使用“”和变量时。它不插入任何东西。你能找出原因吗?谢谢
这不会将修改后的内容保存回变量中【参考方案3】:
您也可以使用Parameter-Expansion 替换变量中的子字符串。 例如:
website="https://***.com/a/58899829/658497"
echo "$website//\//\\/"
https:\/\/stackoverflow.com\/a\/58899829\/658497
【讨论】:
以上是关于我可以使用 sed 来操作 bash 中的变量吗?的主要内容,如果未能解决你的问题,请参考以下文章
bash shell参数展开(Shell Parameter Expansion):替换变量(variable)中的字符串