Удаление поля из текста, разделенного запятыми, с акцентированными символами

Вам нужна команда systemctl, а не sysctl.

systemctl stop docker

Если вы хотите, чтобы он не запускался при загрузке:

systemctl disable docker
1
15.08.2017, 02:31
3 ответа

Поскольку я не уверен, что вам так сильно нужен код perl, вот аналогичный код awk:

awk -F';' -v OFS=';' '{ $NF=""; print }' data.csv

=> Этот код очищает последнее поле каждой строки ( $NF=""). Поля ввода (-F\;) и поля вывода (OFS=';') считаются разделенными символом ";".

То же самое с sed:

sed 's/[^;]*$//' data.csv

=> Это заменяет ( s/.../.../) самая длинная последовательность символов, не являющаяся ";" ( [^;]*) в конце строки ( $) без ничего.

То же самое с grep:

grep -o '.*;' data.csv

=> grepрегулярные выражения по умолчанию являются жадными, что означает, что они соответствуют самой длинной возможной последовательности. Здесь .*;означает "самая длинная последовательность символов, которая заканчивается знаком ";". Опция -oвыводит то, что совпадает, а не всю строку.

Наконец , эквивалентом perlбудет (спасибо @steeldriver):

perl -F';' -lpe '$F[-1]=""; $_ = join ";", @F' data.csv

=> Он работает аналогично awk, здесь соединение явно.

4
27.01.2020, 23:14

Нет разреза?:(

Если вы собираетесь играть с файлами CSV, cut обязательно станет вашим другом:

cut -f 1-3 -d';' semico.csv | xargs -I{} echo {}";"

Разбивка :Вырезать (извлечь )столбцы с 1 по 3, разделенные символом ';' Затем для каждой строки (as cut удалит последний ';', передаст его в xargs и echo line + ;

Конечно, медленнее, чем grep, но в долгосрочной перспективе, вероятно, лучше использовать правильный инструмент для работы

Альтернатива, потому что людям не нравятся xargs :cut -f 1-3 -d';' semico.csv | sed 's/$/;/'

То же самое, но с sed, где вы указываете заменить конец строки на ;

1
27.01.2020, 23:14

Способ bashи использованиеshell parameter expansion:

"${line%;*};"
1
27.01.2020, 23:14

Теги

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