regexp, который соответствует всем маркерам, независимым от порядка

Это меньше о числе столбцов и больше о том, что должно быть произведено. Вы не можете настроить все поля, но можно скрыть владельца и группу -g и -G и настройте время --time-style=.

5
04.09.2014, 14:31
4 ответа

Вы должны использовать awk :

$ awk '/a|A/ && /R|r/ && /N|n/' file
Arizona
Arkansas
California
Maryland
Nebraska
New Hampshire
North Carolina
North Dakota
Rhode Island
South Carolina
Virginia
West Virginia

С gawk , вы можете использовать IGNORECASE :

gawk '/a/ && /r/ && /n/' IGNORECASE=1 file
2
27.01.2020, 20:40
cut -d: -f2 states.txt | tail -n +2 | egrep -i  '[arn].*[arn].*[arn]'
0
27.01.2020, 20:40

Команда grep не имеет правильного оператора AND, поэтому при решении подобных задач приходится творчески подходить к их решению. Вы можете сделать, как вы выбрали, и объединить в цепочку несколько grep. Но вы также можете сделать нечто подобное:

$ echo -e "arie\narin" | grep -i '[arn].*[arn].*[arn]'
arin

Это будет соответствовать любой строке, которая содержит комбинацию a,r или n, и она должна содержать 3 вхождения символов из этого набора.

Слова с пробелами

Для работы с пробелами вы можете адаптировать приведенный выше регекс следующим образом:

$ echo -e "arie\narin\nar nie" | \
    grep -i '[arn][[:alpha:]]*[arn][[:alpha:]]*[arn]'
arin

Здесь вместо того, чтобы принимать любой тип символов между нашими блоками [arn], мы более избирательно подходим, беря только символы из набора [[:alpha:]]. Также мы говорим grep, что мы хотим *, т.е. ноль или больше этих символов между ними.

2
27.01.2020, 20:40

Ну, один из вариантов - sed, хотя это может быть значительно медленнее, чем grep альтернативный

cut -d: -f2 states.txt | tail -n +2 |  sed -n -e '/a/I{/r/I{/n/Ip}}'
Arizona
Arkansas
California
Maryland
Nebraska
New Hampshire
North Carolina
North Dakota
Rhode Island
South Carolina
Virginia
West Virginia
0
27.01.2020, 20:40

Теги

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