Luc*_*ier 59
无需使用echo + a pipe + sed.
一个简单的替换变量就足够快了:
echo ${DATE//\//\\/}
#> 04\/Jun\/2014:15:54:26
Run Code Online (Sandbox Code Playgroud)
干得好:
kent$ echo "04/Jun/2014:15:54:26"|sed 's#/#\\/#g'
04\/Jun\/2014:15:54:26
Run Code Online (Sandbox Code Playgroud)
你的tr
路线不正确,你可能会误解什么tr
,tr 'abc' 'xyz'
会改变a->x, b->y, c->z
,而不是整体改变abc->xyz
..
您还可以转义斜杠,其可读性稍差于哈希值:
echo "04/Jun/2014:15:54:26" | sed 's/\//\\\//g'
Run Code Online (Sandbox Code Playgroud)
使用SED替换:
sed 's#/#\\/#g' < filename.txt > newfilename.txt
Run Code Online (Sandbox Code Playgroud)
你通常使用"/"代替"#",但只要它在那里就没关系.
我在Windows PC上写这个,所以我希望它是对的,你可能不得不用另一个斜线来逃避斜线.
Sed解释说,"-e"允许你编辑文件.您可以使用-i自动创建备份.
sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
Run Code Online (Sandbox Code Playgroud)
其他答案中没有提到这一点,所以我想补充一些说明:
tr
使用两组字符进行替换,第一组字符与第二组字符一一对应地进行替换。联机帮助页指出
通过根据需要重复其最后一个字符,将 SET2 扩展到 SET1 的长度。SET2 的多余字符将被忽略。
例子:
echo abca | tr ab de # produces decd
echo abca | tr a de # produces dbcd, 'e' is ignored
echo abca | tr ab d # produces ddcd, 'd' is interpreted as a replacement for 'b' too
Run Code Online (Sandbox Code Playgroud)
当用于sed
替换时,您可以使用“/”之外的其他字符作为分隔符,这将使您的表达更清晰(我喜欢使用“:”,@n34_panda在他们的答案中建议“#”)。不要忘记使用/g
修饰符来替换所有出现的情况:sed 's:/:\\/:g'
带引号或sed s:/:\\\\/:g
不带引号(反斜杠必须转义两次)。
最后,您最短的解决方案可能是@Luc-Olivier的答案,涉及替换,形式如下(当属于预期模式的一部分时,也不要忘记转义正斜杠):
echo ${variable/expected/replacement} # will replace one occurrence
echo ${variable//expected/replacement} # will replace all occurrences
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29846 次 |
最近记录: |