删除除以特定模式开头的行之外的空格

删除除以特定模式开头的行之外的空格

我想删除文件中的所有空格,除了以相同模式开头的每一行(模式是“ORGANISM”)。

输入:

Cat; Dog; Squirrel
ORGANISM Animalus terrus
Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT

输出:

Cat;Dog;Squirrel
ORGANISM Animalus terrus
Sequence:ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT

除了以字符“ORGANISM”开头的行之外,任何行中都不再有空格。

答案1

sed '/^ORGANISM/!s/ //g' /path/to/input

这将删除所有行上的所有空格不是从...开始ORGANISM

答案2

sed -e '/^ORGANISM/n' -e 's/ //g'  < input > output

n如果第一个表达式以 开头,则第一个表达式跳转到ext 行ORGANISM,如果没有发生,s则将所有空格替换为空(g全局)

答案3

这是一个 Perl 版本,使用负向前查找(?!ORGANISM)来确定是否需要执行替换。-p标志允许自动打印

$ perl -pe 's/[[:blank:]]//g if /^(?!ORGANISM).*/' input.txt                                                             
Cat;Dog;Squirrel
ORGANISM Animalus terrus
Sequence:ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT

相关内容