use*_*178 1 macos bash shell sed
我有以下标签分隔的输入文件.我想删除行尾的尾随选项卡并执行"在文件中",这样我就不必将修改后的数据输出到新文件.原因是存在大量数据,因此我不希望效率低下并读入数据然后再将其写出来.
Hybridization REF Gene_Symbol Chromosome Genomic_Coordinate TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-WR-A838-01A-12D-A409-05
cg00000029 RBL2 16 53468112 0.162232896986279 0.191627667901702 0.0712181967886229 0.0797617926225958 0.134907151266991 0.0541415985613948 0.0898579298345672 0.037865566345129 0.0681542463965581 0.101053013486289
cg00000108 C3orf35 3 37459206 NA NA NA NA NA NA NA NA NA NA
cg00000109 FNDC3B 3 171916037 NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
要做到这一点,我一直在使用以下变体:
sed -i '' 's/\t\n/\n/g' input.txt
Run Code Online (Sandbox Code Playgroud)
但这甚至不会删除尾随标签.我使用的是Mac OS X,所以没有GNU.解决办法是什么?
编辑
我在这里发布了文本文件
任何假设\t将由sed直接解释的答案都假定为GNU sed,这是OSX中没有的.但是你有bash,所以你有一个简单的printf转换为您的脚本:
$ sed -i '' -e $'s/\t$//' input.txt
Run Code Online (Sandbox Code Playgroud)
在这种情况下,脚本引用了扩展反斜杠转义序列的引号.请注意,这是一个BASH功能,我们用它来更明智地将内容放入sed中.
将此与您问题中的脚本变体相比较,我在搜索正则表达式中加上一个美元符号来表示搜索字符串的结尾 - 这个脚本基本上说:
s - 替代\t$- 位于行尾的任何标签,// - 用空字符串.我们不需要g替换的("全局")选项,因为sed会自动将替换应用于文件的每一行.