Я предпочитаю использовать id3v2, просто введите id3v2 -l somefile.mp3. Вы также можете увидеть справочную страницу id3v2 для более конкретного использования.
Самый короткий путь, который я могу найти:
echo `sed 's/[^0-9]//g' your_file` | sed 's/ /,/g'
Результат:
8192,8194,8202,8245,8434,8754,8761,8762,8764,8771
[^0-9] - означает все, кроме цифровых
[ f7] - удаляет все, кроме цифр
Замените your_file на путь к вашему файлу
Для окончательной задачи с помощью команды kill. Будьте осторожны при использовании этой строки, он убьет каждый PID в списке:
for pid in `sed 's/[^0-9]//g' your_file | grep -v '^$'`; do kill -9 $pid;done
Перед запуском предыдущей строки вы можете запустить эту строку:
for pid in `sed 's/[^0-9]//g' your_file | grep -v '^$'`; do echo "kill -9 $pid";done
что-то вроде этого:
kill -9 8192
kill -9 8194
kill -9 8202
kill -9 8245
kill -9 8434
kill -9 8754
kill -9 8761
kill -9 8762
kill -9 8764
kill -9 8771
Удачи!
Вот один лайнер для вашей цели,
sed 's/[^0-9]//g' file.txt| xargs | sed 's/ /,/g'
или
sed 's/[+|IdUserroot\-]*//g' file.txt | xargs | sed 's/ /,/g'
Выход:
8192,8194,8202,8245,8434,8754,8761,8762,8764,8771
Объяснение
man sed
s/regexp/replacement/
Attempt to match regexp against the pattern space. If successful, replace that
portion matched with replacement. The replacement may contain the special charac‐
ter & to refer to that portion of the pattern space which matched, and the special
escapes \1 through \9 to refer to the corresponding matching sub-expressions in the
regexp.
g Copy/append hold space to pattern space.
Регулярное выражение [Википедия]
[^ ] Matches a single character that is not contained within the brackets.
For example, [^abc] matches any character other than "a", "b", or "c". [^0-9]
matches any single character that is not a number from "0" to "9".
Следовательно, используя sed, я заменил все пространством. Затем xargs поместите их в строку, разделенную пробелом,
$ sed 's/[^0-9]//g' file.txt| xargs
8192 8194 8202 8245 8434 8754 8761 8762 8764 8771
На последнем шаге я заменил все пробелы на ,, используя sed
, где текст находится в файле input в том же каталоге, и результат указан в файле output.
cat ./input | sed -e 's/+------+------+//g' | sed -e 's/| Id | User |//g' | sed -e 's/ | root |//g' | tr -d "\n" | sed -e 's/| /,/g' | sed -e 's/ ,/,/g' | sed -e 's/ ,/,/g' > output
Когда я сделал это, ваш пример получил: [!d1 ]
+------+------,8192,8194,8202,8245,8434,8754,8761,8762,8764,8771
Это может быть потому, что в верхней строке вашего примера отсутствует + - может быть еще несколько ошибок ...
Тогда я думаю, вам просто нужно добавить в начале
Или, в надежде, небольшое улучшение в отношении того, что предложил Раду (также основанный на вышеприведенном вводе):
cat ./input | sed 's/[+-]*//g' | sed 's/ | root |//g' | tr -d "\n" | sed 's/| /,/g' | sed 's/ ,/,/g' | sed 's/ ,/,/g' | sed 's/^,//' | sed 's/,[0-9]* $/\n/' | sed 's/Id//g' | sed 's/,User,,//g' | sed 's/ //g' > output
Затем, основываясь на вас, Q & amp; A, вы должны иметь возможность запускать:
sudo /mysql_rms/bin/mysqladmin -S /mysql_rms/var/mysql_rms.sock -p kill $(cat ./output)
, хотя вы можете проверить, является ли это правильной командой с этой первой:
echo "sudo /mysql_rms/bin/mysqladmin -S /mysql_rms/var/mysql_rms.sock -p kill $(cat ./output)"
Я думаю, что это то, что вам нужно. Некоторые другие ответы не удалили последнюю часть.
sed -n 's/.*\([0-9]\{4\}\).*/\1/p' file | sed ':a;N;$!ba;s/\n/,/g; s/\(.*\),\(.*\)$/\1/g'
Небольшой пример,
$ (echo '| Id | User |'; echo '| 8192 | root |'; echo '| 8194 | root |'; echo '| 8771 | root |') | sed -n 's+.*\([0-9]\{4\}\).*+\1+p' | sed ':a;N;$!ba;s/\n/,/g; s/\(.*\),\(.*\)$/\1/g'
8192,8194