Это меньше о числе столбцов и больше о том, что должно быть произведено. Вы не можете настроить все поля, но можно скрыть владельца и группу -g
и -G
и настройте время --time-style=
.
Вы должны использовать 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
Команда 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
, что мы хотим *
, т.е. ноль или больше этих символов между ними.
Ну, один из вариантов - 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