Как использовать Sed для замены всех символов перед двоеточием?

Ваша команда:

set bootargs_nand=setenv bootargs ${bootargs} root=/dev/mtdblock2
      ip=192.168.0.100 rootfstype=jffs2

не будет работать как есть.

Это должно, по крайней мере, быть:

setenv bootargs_nand 'setenv bootargs ${bootargs} root=/dev/mtdblock2
       ip=192.168.0.100 rootfstype=jffs2'

без = знак, и использующий одинарные кавычки для предотвращения расширение ${bootargs} до bootargs_nand команда на самом деле выполняется.

Для установки более гибкой настройки IP необходимо также указать ip=${ipaddr} в рамках той команды вместо того, чтобы явно использовать исполнительный адрес. Значением среды Uboot заменят.

Этот ответ предварителен, пока эти дефекты не были исправлены.

27
12.06.2014, 19:24
4 ответа
[

] Другой метод, использующий [] awk[]:[

] [
awk -F: '{ print $NF }'
]
6
27.01.2020, 19:39

Предположим, что вы хотите удалить все до последней двоеточия и оставить john.doe нетронутым:

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
  sed 's/.*://'

Объяснение:

Первая строка просто передает тестовую строку в sed, например, для целей.

Вторая - основная sed замена . Часть между первой и второй / - это регекс для поиска, а часть между второй и третьей - это то, чем ее заменить (в данном случае ничего, так как мы удаляем).

Для регекса, . соответствует любому символу, * повторяет это любое количество раз (включая ноль) и : соответствует двоеточие. Настолько эффективно, что за двоеточием следует все, что угодно. Так как .* может включать двоеточие, то соответствие "жадно" и все до последнего двоеточия включено.

42
27.01.2020, 19:39
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'

Я заменяю все вхождения : на вкладку tab и затем использую awk для извлечения строкового джона. лань.

Если у вас нет файла, вы можете попробовать это.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | 
awk -F'\t' '{print $4}'

Согласно комментариям Грэма, мы можем использовать awk для печати только последнего столбца, используя переменную NF из awk, как показано ниже.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'

Включение комментариев Graeme, чтобы избавиться от ненужных sed

Команда может быть изменена, как указано ниже.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
7
27.01.2020, 19:39

Пожалуйста, попробуйте

отредактировать: удалить якорь

echo 'abc:fjk' |sed 's/.*:/john.doe/g'

и удалить

echo 'abc:fjk' |sed 's/.*://g'
2
27.01.2020, 19:39

Теги

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