USB не отображается в меню загрузки или биосе

Последнее поле в word1,word2,word3,a,b,c,d,ee, а третье поле — word3. Похоже, вам нужна часть строки, начинающаяся с третьего поля. Это проще с cut:

$ echo word1,word2,word3,a,b,c,d,e | cut -d , -f 3-
word3,a,b,c,d,e

-f 3-равно -f xyдля полей от x до y, но с yопущено, так что это от 3 ряддо последнего поля.

Обратите внимание, что предполагается, что строки содержат как минимум 3 поля. Это дало бы пустые строки вывода для строк ввода, содержащих 2 поля, и оставило бы строку нетронутой, если она не содержала запятую (вы можете добавить опцию -s, чтобы пропустить строки без разделителей):

$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -d , -f 3-
a

c
c,d
$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -sd , -f 3-

c
c,d

С awkвы можете сделать:

$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,[^,]*,/, "")'
c
c,d

(хотя вариант awk 'sub(/^([^,]*,){2}/, "")'POSIX менее переносим, ​​так как все еще существует несколько awkреализаций, которые не поддерживают {x,y}оператор регулярного выражения)

Чтобы удалить первые 2 поля (и выводить только те строки, где они были удалены), хотя это будет использовать awkкак прославленный sed, так как это то же самое, что и sed -n 's/^[^ ,]*,[^,]*,//p'.

Или:

$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,?[^,]*,?/, "")'


c
c,d

для печати пустой строки для строк, содержащих менее 3 полей.

1
28.10.2015, 01:50
0 ответов

Теги

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