我有一个像这样的字符串
BRADI5G20430|BRADI5G20430.1||1
如何用标签(“\ t”)替换条形图(单个和多个)? 我尝试了这个但是没有工作
sed 's/\|+/\t/g'
我也想在bash脚本中包含这一行。
答案 0 :(得分:3)
你需要逃避+
$ sed 's/|\+/\t/g' file
BRADI5G20430 BRADI5G20430.1 1
或者您可以使用sed的-r
选项,但这次+
将是“一个或多个”,您需要转义“|”因为在正则表达式中,它意味着交替。
$ sed -r 's/\|+/\t/g' file
BRADI5G20430 BRADI5G20430.1 1
或使用awk,将字段分隔符设置为“|”然后将输出字段分隔符OFS
设置为选项卡\t
例如
$ awk -F"|" '{$1=$1}1' OFS="\t" file
BRADI5G20430 BRADI5G20430.1 1
这会用“|”替换每个标签。如果要替换所有“|”有一个标签
$ awk '{gsub(/\|+/,"\t")}1' file
BRADI5G20430 BRADI5G20430.1 1
答案 1 :(得分:2)
答案 2 :(得分:1)
我不确定为什么+
不起作用,但这会:
$ echo "BRADI5G20430|BRADI5G20430.1||1" | sed -e 's/\|\{1,\}/\t/g'
BRADI5G20430\tBRADI5G20430.1\t1
答案 3 :(得分:1)
它是如何工作的?
提示:如果你看到它不起作用,你应该能够看到你需要做些什么来使它工作 - 尝试删除部分并看看行为如何变化。
提示#2:这是sed无法识别的+
部分。
sed 's/\|\|*/\t/g'