разграничить пространство, но игнорировать пространство обратногослаш

У меня тоже была эта проблема. Я обнаружил команду:

/sbin/get _ hd _ smartinfo

При запуске с out args печатает руководство по использованию.

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

/sbin/get _ hd _ smartinfo -d 2 -i 1

Нажмите ctrl-c для завершения и распечатайте «Save file to/ tmp/sdX_smart_zzzzzzz», где sdX является вашим устройством.

[/var/log] # /sbin/get_hd_smartinfo -d 2 -i 1 
001 Raw_Read_Error_Rate          215244560 119 099 006 OK
...
242 Lifetime_Reads_To_Host       23449824883497 100 253 000 OK
^CCatch interrupt Singal,Interrupt ..
Save file to /tmp/sdb_smart_563ffc1c
-121--79151-

этот вопрос на самом деле тогда о BSD tr, а не gnu tr.

BSD tr man:

 -C      Complement the set of characters in string1, that is ``-C ab''
         includes every character except for `a' and `b'.

 -c      Same as -C but complement the set of values in string1.

FreeBSD 8.2                    October 13, 2006

GNU tr man:

   -c, -C, --complement
          use the complement of SET1

OSX встроен в инструменты, я считаю, что это версии BSD.

[фиксированная опечатка, sed/tr]

-121--45189-

Возможно, update-grub2 не был запущен после завершения установки Linux? Обычно это помогает обновить меню параметров загрузки.

Я вижу комментарий clearkimura об изменении /boot/grub/grub.cfg , но в этом файле ясно сказано не изменять его содержимое, поскольку он автоматически генерируется на основе /etc/default/grub и /etc/grub.d/.

8
25.09.2018, 18:54
4 ответа

с gnu awk(gawk)вы можете использовать некоторые утверждения нулевой -длины, такие как \<или\>:

$ echo 'a\ b c' | gawk 'BEGIN{FS="\\> +"} {print $1}'
a\ b

, но, к сожалению, не полноценные -из perlили pcre(, например. (?<!\\), (?<=\w)и т. д.):

$ echo 'a\ b, c' | perl -nle '@a=split /(?<!\\)\s+/, $_; print $a[0]'
a\ b,
9
27.01.2020, 20:08

Всего лишьsed:

sed -r 's/^((([^\]*\\ ){1,})?[^ ]*).*/\1/' infile

Или короче:

sed -r 's/^(([^\]*\\ )*[^ ]*).*/\1/' infile

Это (([^\]*\\ ){1,})?[^ ]*соответствует:

  • [^\]*\\:все, что не является обратной -косой чертой, которая заканчивается обратной -косой чертой, за которой следует пробел (обратите внимание, что \внутри класса символов экранирование не требуется, а снаружи ).
  • ([^\]*\\ ){1,}:сопоставление выше с одним -или -больше раз появления.
  • (([^\]*\\ ){1,})?:это необязательно при использовании (...)?; вместо этого мы могли бы использовать ([^\]*\\ ){0,}или ([^\]*\\ )*.
  • ((([^\]*\\ ){1,})?[^ ]*):соответствует вышеприведенному, за которым необязательно следует все, что не является пробелом, и сохраняется как групповое совпадение с \1в качестве обратной ссылки -.
  • ((([^\]*\\ ){1,})?[^ ]*).*:соответствует выше (...)и всем остальным .*.

затем заменяющая часть просто напечатает \1, который является выходом:

5678
testing,\ group
[testing
ip\ 5.6.7.8
launch-wizard-1
456dlkjfa
1.2.3.4
test
default
launch-wizard-2
launch-wizard-3
2.3.4.5/32
4
27.01.2020, 20:08

Вы можете заменить \space чем-то другим, а потом вернуться обратно.

sed 's/\\ /\\x20/g' data_file | awk '{ print $1; }' | sed 's/\\x20/\\ /g'
5
27.01.2020, 20:08

С GNU grepили совместимым:

grep -Po '^(\\.|\S)*'

Или с ЭРЭ:

grep -Eo '^(\\.|[^\[:space:]])*'

Это трактует \как оператор кавычек, пробелы как разделитель, но также и саму себя. То есть при вводе foo\\ barон возвращает foo\\.

5
27.01.2020, 20:08

Теги

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