【发布时间】:2010-04-12 01:37:07
【问题描述】:
我有一个这样的字符串
BRADI5G20430|BRADI5G20430.1||1
如何用制表符(“\t”)替换栏(单个和多个)? 我试过了,但没用
sed 's/\|+/\t/g'
我也想在 bash 脚本中包含这一行。
【问题讨论】:
我有一个这样的字符串
BRADI5G20430|BRADI5G20430.1||1
如何用制表符(“\t”)替换栏(单个和多个)? 我试过了,但没用
sed 's/\|+/\t/g'
我也想在 bash 脚本中包含这一行。
【问题讨论】:
你需要转义+
$ 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
【讨论】:
【讨论】:
+,如果不使用-r,你只需要转义它
我不知道为什么+ 不起作用,但这会:
$ echo "BRADI5G20430|BRADI5G20430.1||1" | sed -e 's/\|\{1,\}/\t/g'
BRADI5G20430\tBRADI5G20430.1\t1
【讨论】:
怎么没用?
提示:如果您发现它不起作用,您应该能够看到您需要做什么才能使其起作用 - 尝试移除部分并查看行为如何变化。
提示 #2:这是 sed 无法识别的 + 部分。
sed 's/\|\|*/\t/g'
【讨论】: