Можно ли удалить определенный повторяющийся символ списка с помощью регулярного выражения?

Он не включен в ядро ​​Linux.

lklm сообщение:Ганс Петер Анвин

We already have that, it's called initramfs; you can use either busybox or klibc ash in this space, and no need to run it in kernel space.

Running this kind of crap in kernel space is lunacy in the extreme.

2
02.11.2021, 22:13
2 ответа
$ awk '!(/^C\(..[0-9])$/ && seen[$0]++)' file
V(Mn9)
V(C1,H3)
V(Mn6)
V(Mn6)
V(C4,H6)
V(Mn9)
V(Mn9)
V(C1,Mn6)
V(C4,Mn9)
V(Mn6)
V(C1,C4)
C(Mn9)
C(Mn6)
C(C1)
C(C4)
V(C1,H2)
V(Mn9)
V(Mn6)
V(C4,H5)

Вышеприведенное предполагает, что у вас нет пробелов до/после видимых символов в вашем образце ввода. Если вы это сделаете, удалите их, например.:

$ awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")} !(/^C\(..[0-9])$/ && seen[$0]++)' file
V(Mn9)
V(C1,H3)
V(Mn6)
V(Mn6)
V(C4,H6)
V(Mn9)
V(Mn9)
V(C1,Mn6)
V(C4,Mn9)
V(Mn6)
V(C1,C4)
C(Mn9)
C(Mn6)
C(C1)
C(C4)
V(C1,H2)
V(Mn9)
V(Mn6)
V(C4,H5)
0
04.11.2021, 14:04

Предлагаю использовать sedдля сбора строк в трюме, чтобы проверить, появились ли они раньше:

 sed -n 'H;G;/^\(C([^)]*)\).*\1 *\n/!P'
  • Hдобавляет текущую строку в область хранения
  • Gдобавляет пространство хранения со всеми строками, которые мы когда-либо видели, к пространству шаблонов
  • C([^)]*)является одним из тех шаблонов C(…),^привязывает его к началу строки, и он окружен \(…\), поэтому позже на него можно будет ссылаться как \1. Нам нужно \1 *\nв качестве шаблона с новой строкой (после возможных пробелов ), чтобы избежать совпадения с только что добавленной строкой в ​​конце. Таким образом, весь шаблон /^\(C([^)]*)\).*\1 *\n/соответствует строке с дубликатом C(…), поэтому, только если этот !не соответствует,
  • Pпечатать все до первой новой строки (= без добавленного пробела для хранения ), в то время как вывод по умолчанию подавляется опцией -n

Обратите внимание, что в зависимости от вашей sedверсии и размера файла может произойти сбой, поскольку со временем все строки будут находиться в памяти.

0
03.11.2021, 07:12

Теги

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