, поскольку Echo ABC
и Echo ABC
дает тот же выход: ABC
и первая команда ECHO $ (ECHO «ABC»)
==> ECHO ABC
==> ABC
. Несколько пробелов только что удаляются оболочкой, поэтому Echo
даже не знает, сколько из них присутствовало в командной строке.
Вы можете сохранить пробелы, цитируя все выражение следующим образом:
$ echo "$(echo " ABC")"
ABC
или
$ echo "$(echo ' ABC')"
ABC
GNU AWK только начал включать интервальные выражения (ваш {
4}
Квалификация [0-9]
) в 4.0:
интервальные выражения не были традиционно доступны в awk. Они были добавлены как часть стандарта POSIX, чтобы сделать awk и egrep согласуться друг с другом.
Первоначально, потому что старые программы могут использовать «{'и'}» в постоянных регеэкспах, Gawk не соответствовал интервальным выражениям в RegeXPS.
Однако, начиная с версии 4.0, Gawk по умолчанию соответствует интервальным выражениям. Это связано с тем, что совместимость с POSIX стала важнее для большинства пользователей GAWK, чем совместимость со старыми программами.
Для программ, которые используют «{'и'}» в постоянных регеэкспных константах, хорошая практика всегда избежать их с обратной ячейкой. Затем константы Regexp действительны и работают так, как вы хотите, чтобы они использовали любую версию AWK.17
. См. Ручной ввод .
Эта линия поражает меня как иметь две проблемы:
grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
Вы можете сделать все это в GREP
:
Grep -e «$ 2» --e '( [0-9] \ {4 \}, [0-9] \ {4 \}) 'dcmresults.txt >> ~ / export / "$ 1" /Tagresults.txt
GREP
, получая свой вход, а где находится выход GREP
? С AWK
имеет имя файла для ввода, он будет игнорировать стандартный вход.