Где Chrome OS, linux (beta )монтирует USB-устройства при переадресации

Поскольку OP, кажется, непреклонен в использовании «единого вызова» sed, вот один:

Подход без -разделения слов с частичным шаблоном -скрытие пробелов:

sed -n -e 's/^\W*//' -e 's/\(\W\+\)/\n/gp' words.txt

РЕДАКТИРОВАТЬ :Обратите внимание, что, как указал @don _crissti, это решение не является полным, так как оно не может распечатать слова, которые появляются в строке сами по себе, а также вставить новая строка в самом конце вывода, если в файле отсутствует завершающая новая строка. Чтобы исправить эту проблему, см. Следующее, крайне уродливое решение.

Основная проблема с sedзаключается в том, что пространство шаблонов, на котором работает каждое выражение -e, всегда определяется строками. Если вы вставите новые строки, тем самым изменив структуру строки между первым выражением и следующим, следующее выражение не сможет работать с обработанными данными.

Пояснение:

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

  • Ключ во второй части представляет собой комбинацию опции -nи командыp(print ),который некоторые люди любят называть sed«режимом grep», и в основном эффекты, которые будут напечатаны только совпавшими и/или измененными строками. -nзапрещает печать любого вывода, а pпринудительно печатает совпадающие и/или измененные строки. Таким образом, вы избежите печати строк, которые были полностью пустыми. Так как \W\+ожидает по крайней мере один не -словесный символ, пустые строки отсутствуют. И начальные пробелы, которые могли бы соответствовать выражению, ранее превращались в пустые строки.

  • РЕДАКТИРОВАТЬ :Я забыл объяснить, что отсутствие команды pв первом выражении также является ключевым. В каждом выражении пространство шаблона обычно печатается, заставляя нас видеть каждую строку столько раз, сколько было выражений, которые ее печатали, с вариациями, если какое-либо из этих выражений также изменило данную строку. Однако, несмотря на то, что пространство шаблонов не печатается, оно переносится в последующие выражения в его измененной форме, что позволяет нам связывать выражения, которые работают с одним конвейером, который начинается с одной входной строки, при этом видя только вывод последнего выражения..

Если вам нравится рассматривать слова как последовательности не -пробельных символов, что ж... так оно и есть, но это определение охватывает гораздо больше, чем просто слова. Это не слова, это не -пробельные последовательности. Однако, если вы хотите сопоставить их и напечатать их в отдельных строках вместо слов, используйте:

sed -n -e 's/^\s*//' -e 's/\(\s\+\)/\n/gp' words.txt

Подход с заменой нулевого -байта

РЕДАКТИРОВАТЬ :Проблема строк с одним словом и отсутствующей новой строкой в ​​EOF, как указано @don _crissti, может быть решена с помощью следующей команды. Хотя он и не слишком длинный, помимо того, что он смехотворно хакерский, у него есть по крайней мере один недостаток, о котором я знаю :, а именно то, что он не работает для файла только с одной строкой, если эта единственная строка содержит несколько слов.Идея решить эту проблему состоит в том, чтобы добавить ветки, чтобы проверить, является ли последняя строка первой, еще больше усложнив программу (и отняв у меня еще больше времени :D ). Вот команда:

sed -rn 's/(\b|\W)+/\x0/g; s/^\x0//; s/\x0$//; s/\x0/\n/g; /^$/d; $! p; $ { s/$/\n/; P }'

Пояснение:

Команда работает в следующих проходах:

  • Во-первых, символы, отличные от -слов, а также границы слов, такие как конец и начало строк, которые являются утверждениями нулевой -ширины, а не символами, заменяются нулевыми -байтами. Это также включает границы слов вместе с их соседними последовательностями символов, отличных от -, где они встречаются в таких позициях.

  • Затем из начала и конца каждой строки удаляется ноль -байтов.

  • Затем каждый промежуточный нулевой -байт заменяется новой строкой.

  • Любые полученные пустые строки удаляются из пространства шаблонов. Здесь нет пробелов -, только строки.

  • Если адрес текущего пространства шаблонов не является последним адресом (, то есть мы не находимся на последней строке ), мы просто печатаем строку.

  • В конце наших данных выполняем 2 команды:

    • Мы добавляем новую строку в конце текущего пространства шаблонов, чтобы иметь по крайней мере 1 завершающую новую строку, даже если исходные данные не заканчивались на нее.

    • Мы печатаем только до первой встроенной новой строки в нашем текущем пространстве шаблонов, которая имеет максимум 2 новые строки.

Кстати, самое простое решение этой проблемы, которое я видел, это:

grep -o '\w\+' words.txt

Или, если вам не нужно иметь дело со строками, начинающимися с пробела:

fmt -1 words.txt

1
03.03.2021, 18:47
1 ответ

В моей Chrome OS, версия 91.0.4472.81 (Официальная сборка)(64 -бит ), я сделал следующее :Вставил USB-накопитель, затем правой кнопкой мыши -щелкнул Файлы приложение и выбрал Поделиться с Linux .

Затем USB-накопитель монтируется в:/mnt/chromeos/removable/(см. здесь для справки ).

Дополнительно:

В вопросе «зайти в настройки и включить мое USB-устройство» означает ли это выполнение следующих шагов?:

  • Среда разработки Linux (Бета-версия)--> Управление USB-устройствами (, а затем включение USB-накопителя)

При этом USB-накопитель перестанет быть видимым для приложения «Файлы», поэтому диск не будет виден, и, следовательно, не будет возможности использовать параметр «Общий доступ в Linux».

0
09.06.2021, 20:44

Теги

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