Поиск специальных символов и пробелов

Следующие действия отключат USB-устройство.

sudo eject /dev/sde

Следующее приведет к повторному подключению USB-устройства.

sudo eject -t /dev/sde

Описанное выше работает на моем Linux Mint.
Ссылка:http://www.upubuntu.com/2011/09/how-to-remount-usb-stick-without.html

1
04.05.2021, 12:40
2 ответа

попробуйте это, заключите символы, которые вы хотите найти, в Выражение скобок[...].

grep '[?!#*% ]' infile

есть некоторые исключения, такие как:

  • если ^символ :он может быть размещен в любом месте в [], но не в первом символе, потому что символ ^сначала инвертирует символы в его выражении скобок.
  • если символ ]:должен быть первым символом, потому что этот символ также используется для завершения выражения в квадратных скобках.
  • если -символ :это должен быть первый или последний символ, потому что этот символ также может использоваться для определения диапазона символов.

Зависит от ваших потребностей, которые вы хотите выполнить с найденными персонажами:

  1. Печатать только те символы, если они существуют

    grep -o '[?!#*% ]' infile
    
  2. Удалить эти символы:

    tr -d '[?!#*% ]' < infile              ##or
    sed 's/[?!#*% ]//g' infile             ##or
    awk '{ gsub(/[?!#*% ]/, "") }1' infile
    
  3. Замените их, скажем, одним пробелом:

    tr '[?!#*% ]' ' ' < infile             ##or
    sed 's/[?!#*% ]/ /g' infile            ##or
    awk '{ gsub(/[?!#*% ]/, " ") }1' infile
    
  4. Заменить другой строкой:

    sed 's/[?!#*% ]/someString/g' infile   ##or
    awk '{ gsub(/[?!#*% ]/, "someString") }1' infile
    
  5. Вывести всю строку, в которой хотя бы одно из них встречается в строке:

    grep --color=none '[?!#*% ]' infile    ##or
    sed '/[?!#*% ]/!d' infile              ##or
    awk '/[?!#*% ]/' infile
    
  6. и т. д.

1
28.07.2021, 11:35

Чтобы найти любую строку, соответствующую хотя бы одному из упомянутых вами символов:

grep '[ !?#*%]' file.csv  # looks for space, !, ?, #, *, %  into file.csv and shows matching lines

Будьте осторожны :некоторые символы должны находиться в определенном месте (пример :"[a -c]" ищет "a, b или c", а не "a, -] или с")

Вы также должны указать локаль, в которой будет работать grep.Обычно :локаль C. Это помогает предотвратить определенную локаль (для вариантов ex utf -8 ), чтобы испортить указанный диапазон, если таковой имеется.

Поиск «любой строки, соответствующей любому символу, отличному от :букв, цифр или запятой» в файле csv (при условии, что в качестве разделителя используется запятая, в противном случае просто измените разделитель, который вы фактически используете):

LC_ALL=C grep '[^a-zA-Z0-9,]' file.csv
  # and if you also accept doubleqhotes in that csv:
LC_ALL=C grep '[^a-zA-Z0-9,"]' file.csv
  # and if instead of comma you use TAB as a separator
LC_ALL=C grep "[^a-zA-Z0-9$$(printf '\t')]\"" file.csv
  -or-
LC_ALL=C grep "[^a-zA-Z0-9$$(printf '\t"')]" file.csv
1
28.07.2021, 11:35

Теги

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