LINUX.ORG.RU

6
Всего сообщений: 35

Подскажите как вычленить с помощью grep

Доброго времени суток. Не могу разобраться в синтаксисе так как на русском не нашёл нормального мануала. Имеется файл с текстом в виде:

{
"attr1": 9999.34
"attr2": 8888.23
"attr_3": 3334.00,
"attr4": value
}

Как получить значения первых двух атрибутов в чистом виде и в одну строку? Хочу что бы было вот так:

~$cat file | grep -magic
9999.34 8888.23
~$

 ,

WildUser ()

Помощь в написании скрипта

Добрый день, У меня есть несколько папок с файлами, мне нужно создать текстовый файл в котором будет прописан путь к файлу потом его содержимое, и так просканировать все папки и записать все в 1 файл

Данной командой я определяю пути: find ./ -type f Командой: find./ -type f | xargs cat >> file.txt я собираю все содержимое файлов во всех папках в один файл

Я не понимаю как сделать поочередную запись сначала путь и название потом содержимое

 , ,

kuller255 ()

Как в линукс выводить новые данные записанные в файл в консоль ?

Скрипт наполняет файл, я его периодически смотрю cat myfile, но хотелось бы, чтобы новые данные видеть в консоли постоянно, как это сделать, чтобы не вызывать руками cat постоянно.

 , ,

user2132 ()

Объединить текстовые файлы

Здравствуйте уважаемые!
Прошу помощи.
Тяму не хватает наваять скрипт или последовательность команд.
Есть file1.txt и file2.txt в каждой строке уникальное содержимое:

cat file1.txt

mail@domain submail@domain
mail@domain submail@domain
mail@domain submail@domain

cat file2.txt
submail@domain phone
submail@domain phone


На выходе после сравнения ящиков, нужно получить:

cat file_out.txt
mail@domain submail@domain phone
как сделать? уже котелок не варит.

 , , , ,

CeMKa ()

find + cat

Допустим с помощью find ищем какой либо файл лога, и в выводе иx очень много, какую команду дать cat, что бы оно вывело в консоль, последний созданный файл лога, определять какой из них последний по названию файла или по времени изменения или создания файла лога. Помогите кто чем может)

 , ,

spectr16 ()

вывод файла вставить во второй столбец другого файла

Есть два файла,в первом один столбец 150 строк,во втором 5 столбцов 150 строк.Нужно вывод из первого файла вставить во второй файл вторую колонку,заменив при этом вторую колонку второго файла.

 , ,

Palamar ()

Просто распаковать «простое»

Небольшая головоломка. Всегда можно просто за-cat-ить какую-либо папку:

$ cat * > ../test.cat
$ ls -al * > ../test.ls

Получается такая простенькая «упаковка» (примитивный tar). А как это дело распаковать? Чтоб без геморроя?

 , , ,

Deleted ()

Когда запускалась программа

Как узнать когда последний раз запускалась программа? И потом вывести в файл эту дату и название программы

 , , ,

gordeeva89 ()

Замена цифр в столбце через awk

Есть таблица (файл text1):

#Наименование  Привезено  Продано 
Огрурцы        800        555     
Помидоры       200        105     
Задача: заменить в файле значение во второй строке второго столбца (800) на разность 800 и 555, а значение второй строки третьего столбца(555) обнулить (=0). И сделать так чтоб все вывелось в другой файл с уже новыми значениями. Пробовал cat text1 | awk '....' text1 > text2 Но не получается, подскажите пожалуйста как сделать, перелазил уже кучу форумов нигде не нашел правильного способа. Знаю что можно через sed, но это не универсальный способ. Заранее спасибо

 , , ,

settings3d ()

Как удалить несколько строк из файла блоком

Есть настроенная samba, несколько пользователей, у каждого своя директория и свои права на неё. Конфиг имеет вид:

...
[u001]
path = /media/u001
valid users = @u001
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u002]
path = /media/u002
valid users = u002
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u003]
path = /media/u003
valid users = @u003
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777
Задача: при удалении пользователя почистить конфиг samba командой. Пользователей много, строки идентичны.

Т.е. насколько я поняла, нужно сначала найти номер строки с именем пользователя, и после этого удалить строку с найденным номером и 8 строк дополнительно после найденного.

Нашла, что номер строки можно найти:

cat -n /etc/samba/smb.conf|grep u003
    69  [u003]
    70  path = /media/u003
    71  valid users = u003
Стереть строки можно командой (проверено, работает):

sed -i -e '69,77d' /etc/samba/smb.conf

Вопрос:

1. Как в выводе отобразить номер строки именно в заданном формате [u003], grep квадратные скобки игнорит;

2. Как полученный номер строки поместить в sed;

3. Или это делается как-то сильно проще, а я горожу огород?

 , ,

manik207 ()

дополнять

здравствуйте, Надо записать в одном строком команде,которая выводит на экран содержимое файла shells из текущего каталога (кроме этого на экране ничего не должно быть).Если такого файла в текущем каталоге нет,то его надо скопировать из каталога /etc (все в той же командной строке) я написал команду cat ~/shells || cat /etc/shells > ~/shells |cat ~/shells ну выводит содержимое файла shells но и есть такое строка #/etc/shells:valid login shells как исправить ?подскажите,пжлст

 ,

trung123 ()

Bash. Удаление файлов по списку, в названии которых есть пробелы

Есть похожие темы на форуме, почитал. Сел на линь недавно, куски из разных тем не могу собрать воедино, хотя думаю это элементарно. Задача проста: есть список list.txt, в нём строки такого типа:

  • /files/file.txt
  • /files/file2.txt
  • /files/file3.txt
  • /files/new file.doc
  • /files/new file2.doc

Названия и расширения файлов могут быть разными, главное что в именах присутствуют пробелы!
Команды

rm -i $(cat /list/list.txt)
и
cat /list/list.txt | xargs rm -rv
удаляют только те файлы, в названии которых нет пробелов. Имена с пробелами воспринимаются как 2 файла, соответственно: не найдено. Пробовал в списке экранировать имена с пробелами (одинарные или двойные кавычки,\(.....\), пробел обратным слешем), не работает, опыта мало в таких тонкостях, подскажите куда копать.

 , , ,

egor666 ()

cat: имя файла в архиве

Всем доброго времени! Мне нужно добавить файл-картинку в архив с файлом базы данных, что-то вроде этого:

{ cat "/path/to/file.png"; mysqldump ...; } | bzip2 -1 -c > /path/to/archive.sql.bz2

И всё бы хорошо, но несмотря на то, что бинарные данные попали в архив, они там присутствуют как бы без имени, в результате чего архив даже нормально не распаковывается. Можно ли как-то задать имя этим бинарным данным в архиве? Чтобы в нём было два файла, например:

db.sql
some.png

Создавать промежуточные файлы на диске не хочется, нужно сделать именно одной командой. Это как-то возможно? Буду рад любым идеям, спасибо!

 ,

Novascriptum ()

Почему не идет по пайпу?

Почему

cat /etc/sshd_conf | ssh user@1.1.1.1 "echo pwd | sudo -S -H -u root bash -c 'cat > /etc/ssh/sshd_config'"
обнуляет целевой sshd_config, а не перенаправляет cat /etc/sshd_conf по пайпу?

Да, несекьюрные костыли на тестовых конфигурациях - моя любовь

uname -a
Linux 190 4.3.0-2-generic #11-Ubuntu SMP Fri Dec 4 20:36:35 UTC 2015 i686 i686 i686 GNU/Linux

 ,

mammuthus ()

опять парсинг логов

Добрый день! Есть 2 файла с числами: файл 1.txt содержит числа в столбик:

  • 1
  • 2
  • 3
  • 4

файл 2.txt содержит другие числа в столбик:

  • 11
  • 22
  • 33
  • 44

Что хочется, но не получается: в скрипте на bash считать в две разные переменные сначала первые числа из каждого файла, что-то с ними сделать, сохранить в итоговый файл, потом считать вторые и т.д.

 , , , ,

Levard ()

cat: количество пробелов для \t

Сорри, если вопрос избитый. В нете пишут, что можно использовать утилиту tabs, например, tabs -4, что бы вывод cat с табуляцией был размером в 4 пробела, а не 8.

Если набрать в терминале tabs и сделать cat, работает. Набирать его постоянно, понятно, морока. Тут помогло бы использовать: .bashrc, .bash_profile, /etc/bashrc, /etc/profile.d/... Но не помогло.

Что еще? alias cat='tabs -4 && cat'

 , ,

barberry ()

15 лет прошло, а многие проблемы живее всех живых :)

Гляньте, какую нашёл прелесть!

 , , , ,

tiinn ()

Вопрос про потоковые редакторы UNIX

Читаю щас про sed учебник здешнего юзера, кстати, emulek'a встретил подозрительный кусок.

Далее sed последовательно читает все три файла, применяя к каждой строке в них sed-скрипт (пустой в данном случае). Результат выводится в выходной поток. Вот тут действие sed заканчивается, и опять начинает работать оболочка, последовательно записывая весь вывод в файл all.html. Потому код cat примитивен (пара строк на C), она просто читает входные файлы и выводит их в выходной поток, без всякой обработки, поисков и слияний. (Правда cat ещё и может нумеровать строки с ключом -n)

http://emulek.github.io/sed/ch01s02.html

Я, почему-то всегда думал, что выполнение происходит параллельно, или, как минимум, построчно. Типа, каждая строка передается по конвейру, а не буферы, куски etc. Может автор чуток ошибся? Или я что-то путаю?

 , , ,

quest2017 ()

Запись данных из файла в файл

Здравствуйте!

Есть файл с пробным пакетом modbus rtu. Пакет лежит в hex формате Подскажите, пожалуйста как мне из файла mr.bin записать данные в файл канала лежащий /tmp/rs485 и вывести на экран через hexdump

Пытаюсь так, но не работает

cat mr.bin | hexdump -C | tee /tmp/rs485

 , ,

Paralam ()

Чтение значения переменной из файла в shell-скрипте

Из серии «я познаю мир».

Ковыряясь в инит-скриптах замшелого Линукса, установленного на моём NAS, встретил следующую строку

read line <"$pid_file"

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

line=$(cat "$pid_file")

выглядит куда нагляднее (не то, что башизм $(<"$pid_file")). Но, приведя пульс в порядок и отогнав приступ праведного гнева, я стал размышлять над этой строчкой:

  • не порождаются суб-шелл и cat (минус два форка)
  • читается почти как well-written prose (если не считать косяк в виде имени line для переменной, содержащей pid)
  • надо брать на вооружение

Беглый анализ показывает, что в современном Дебиане оба подхода примерно одинаково популярны:

$ grep '=$(cat [^)]*)' -r /etc/ 2>/dev/null | wc -l
10
$ egrep 'read [[:alpha:]_][[:alnum:]_]*[[:blank:]]*<' -r /etc/ 2>/dev/null | wc -l
7

Что скажут ценители?

Ну, и для развлечения тест производительности :-)

Классика:

$ cat cat_test.sh
#!/bin/sh

i=0

while [ $i -lt $1 ]; do
    var=$(cat value)
    i=$(($i+1))
done

echo $var

Башизм:

$ cat bashcat_test.sh 
#!/bin/bash

i=0

while [ $i -lt $1 ]; do
    var=$(< value)
    i=$(($i+1))
done

echo $var

read:

$ cat read_test.sh
#!/bin/sh

i=0

while [ $i -lt $1 ]; do
    read var < value
    i=$(($i+1))
done

echo $var

Результаты:

$ echo this is a value > value
$ time ./cat_test.sh 1000
this is a value

real    0m2.129s
user    0m0.056s
sys     0m0.212s
$ time ./bashcat_test.sh 1000
this is a value

real    0m0.777s
user    0m0.108s
sys     0m0.144s

$ time ./read_test.sh 1000
this is a value

real    0m0.036s
user    0m0.000s
sys     0m0.036s

 , , , ,

unterwulf ()