Это позволит вывести только те строки, которые начинаются с положительного числа:
sed -n 's/^\([[:digit:]][^ ,]*\).*/\1/p'
В сочетании с одной из ваших линий, это будет выглядеть как:
h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | sed -n 's/^\([[:digit:]][^ ,]*\).*/\1/p'
-n
Это говорит sed
не печатать ни одну линию, если только мы явно не попросим об этом.
s/^\([[:digit:]][^ ,]*\).*/\1/p
Это говорит sed
искать строки, начинающиеся с положительного числа и выводить только это число.
В регексе ^
совпадает только с началом строки. [[:цифра:]]
совпадает с любой цифрой. [^ ,]*
совпадает со всем, что следует за этой цифрой, кроме пробела или запятой. Все это сгруппировано в круглые скобки, так что позже мы сможем сослаться на число как \1
. Затем вся строка заменяется номером, и с помощью опции p
мы говорим sed
распечатать его.
Одна из них использовала [0-9]
для совпадения цифр. С появлением юникодных шрифтов это больше не является надежным. Выражение [[:digit:]]
, однако, является юникодовым безопасным.
Если вы используете GNU sed (что верно для всех Linux-систем), то опция -r
может быть использована для получения расширенных регулярных выражений. При использовании расширенного регекса, пары, используемые для группировки, не нужно экранировать:
sed -rn 's/^([[:digit:]][^ ,]*).*/\1/p'
На OSX или других системах BSD используйте -E
вместо -r
.
Это делает то же самое, но с использованием awk
:
awk -F, '/^[[:digit:]]/{print $1}'
В сочетании с вашим конвейером:
h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | awk -F, '/^[[:digit:]]/{print $1}'
Используйте отдельные цитаты, так как двойные кавычки делают $
вещи в первой оболочке