Как добавить двойные кавычки в файл паролей

getline читает в следующей строке. Вам не нужно его использовать. Текущая строка уже находится в $ 0 :

awk '{print NR, $0}' name_list.txt 
0
25.02.2019, 17:42
4 ответа

Вы можете:

sed 's/[^:]*/"&"/g' /etc/passwd

То есть заключать в кавычки любую последовательность из 0 или более(*)символов, кроме:([^:]).

Или с помощью специального инструмента обработки csv -, который имеет преимущество правильного цитирования (полей стиля csv -), содержащих символы двойных кавычек, а здесь также добавление заголовка:

mlr --icsvlite --ocsv --implicit-csv-header --fs : --quote-all label \
  'User Name,Password,UID,GID,Gecos,Home Directory,Shell' /etc/passwd
4
28.01.2020, 02:13

Я сделал следующим способом

команда:

sed 's/:/"&"/g' filename | sed 's/^/"/'| sed 's/$/"/'

или,

sed 's/:/"&"/g; s/^/"/; s/$/"/' filename

выход:

"user1":"x":"1":"1":"User1":"/home/user1":"/bin/bash"
"user2":"x":"2":"2":"User2":"/home/user2":"/bin/bash"
"user3":"x":"3":"3":"User3":"/home/user3":"/bin/bash"
2
28.01.2020, 02:13

Использованиеawk(не такое короткое, как решение sed, хотя):

$ awk -F ':' -v OFS='":"' '{ $1 = "\"" $1; $NF = $NF "\""; print }' file
"user1":"x":"1":"1":"User1":"/home/user1":"/bin/bash"
"user2":"x":"2":"2":"User2":"/home/user2":"/bin/bash"
"user3":"x":"3":"3":"User3":"/home/user3":"/bin/bash"

Это устанавливает разделитель выходного поля(OFS)на строку ":", а затем добавляет "к первому полю с разделителем:-и добавляет то же самое к последнему полю. Затем он печатает полученную запись.


awkснова, но перебирая поля, добавляя двойные кавычки к каждому перед выводом измененной записи:

awk -F ':' -v OFS=':' '{ for (i=1; i<=NF; ++i) $i=sprintf("\"%s\"", $i); print }' file

Чтение файла, как если бы это был:-CSV-файл с разделителями, с использованием csvformatиз csvkit:

$ csvformat -d ':' -D ':' -U 1 file
"user1":"x":"1":"1":"User1":"/home/user1":"/bin/bash"
"user2":"x":"2":"2":"User2":"/home/user2":"/bin/bash"
"user3":"x":"3":"3":"User3":"/home/user3":"/bin/bash"

Здесь мы сообщаем csvformat, что и входной, и выходной разделители полей должны быть :и что мы хотим заключать в кавычки все поля независимо от того, нужны они на самом деле или нет.

2
28.01.2020, 02:13

Просто так, Руби:

ruby -rcsv -e '
    csv_in  = CSV.new File.new ARGV.shift, col_sep: ":"
    csv_out = CSV.new $stdout,             col_sep: ":", force_quotes: true
    csv_in.each {|row| csv_out << row}
' /etc/passwd
0
28.01.2020, 02:13

Теги

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