tr可以用两个字符替换一个字符吗?
我试图用"〜\n"替换"〜",但输出不会产生换行符.
$ echo "asdlksad ~ adlkajsd ~ 12345" | tr "~" "~\n"
asdlksad ~ adlkajsd ~ 12345
Run Code Online (Sandbox Code Playgroud)
Kei*_*son 26
不,tr是专门用来替换单个字符由单个字符(或根据命令行选项,要删除的字符或由一个发生代替单个字符的运行.).
sed 可能是这项工作的最佳工具:
$ echo "asdlksad ~ adlkajsd ~ 12345" | sed 's/~/~\n/g'
asdlksad ~
adlkajsd ~
12345
Run Code Online (Sandbox Code Playgroud)
(注意,这需要sed将backlash-n \n序列解释为换行符.GNU sed执行此操作,但POSIX除了在正则表达式中之外没有指定它,并且肯定有旧版本的sed那些.)
tr只能做1对1翻译。
这是使用纯 Bash实现此目的的一种方法:
s='"asdlksad ~ adlkajsd ~ 12345'
r=$'~\n'
echo -e "${s//\~/$r}"
asdlksad ~
adlkajsd ~
12345
Run Code Online (Sandbox Code Playgroud)
您可以使用 awk,让 FS/OFS 变量为您完成这项工作:
awk -F'~' -v OFS="~\n" '$1=$1'
Run Code Online (Sandbox Code Playgroud)
用你的例子测试:
kent$ awk -F'~' -v OFS="~\n" '$1=$1' <<< "asdlksad ~ adlkajsd ~ 12345"
asdlksad ~
adlkajsd ~
12345
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35012 次 |
| 最近记录: |