Regex пошелся не так, как надо

, поскольку Echo ABC и Echo ABC дает тот же выход: ABC и первая команда ECHO $ ​​(ECHO «ABC») ==> ECHO ABC ==> ABC . Несколько пробелов только что удаляются оболочкой, поэтому Echo даже не знает, сколько из них присутствовало в командной строке.

Вы можете сохранить пробелы, цитируя все выражение следующим образом:

$ echo "$(echo "  ABC")"
    ABC

или

$ echo "$(echo '  ABC')"
    ABC
0
12.12.2014, 23:26
2 ответа

GNU AWK только начал включать интервальные выражения (ваш { 4} Квалификация [0-9] ) в 4.0:

интервальные выражения не были традиционно доступны в awk. Они были добавлены как часть стандарта POSIX, чтобы сделать awk и egrep согласуться друг с другом.

Первоначально, потому что старые программы могут использовать «{'и'}» в постоянных регеэкспах, Gawk не соответствовал интервальным выражениям в RegeXPS.

Однако, начиная с версии 4.0, Gawk по умолчанию соответствует интервальным выражениям. Это связано с тем, что совместимость с POSIX стала важнее для большинства пользователей GAWK, чем совместимость со старыми программами.

Для программ, которые используют «{'и'}» в постоянных регеэкспных константах, хорошая практика всегда избежать их с обратной ячейкой. Затем константы Regexp действительны и работают так, как вы хотите, чтобы они использовали любую версию AWK.17

. См. Ручной ввод .

2
28.01.2020, 02:28

Эта линия поражает меня как иметь две проблемы:

grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
  1. Вы можете сделать все это в GREP :

     Grep -e «$ 2» --e '(  [0-9] \ {4 \}, [0-9] \ {4 \}) 'dcmresults.txt >> ~ / export / "$ 1" /Tagresults.txt
     
  2. Где находится GREP , получая свой вход, а где находится выход GREP ? С AWK имеет имя файла для ввода, он будет игнорировать стандартный вход.
1
28.01.2020, 02:28

Теги

Похожие вопросы