Sed заменяет шаблон командой

Тип файловой системы — это третий столбец в /proc/mounts; чтобы извлечь этот столбец, вы можете написать:

awk '{print $3}' /proc/mounts

Чтобы сделать это более конкретным, вам нужно сопоставить второй столбец с вашей точкой монтирования:

awk "\$2 == \"$mountpoint\" {print \$3}" /proc/mounts
2
10.08.2019, 03:27
2 ответа

Расширение подстановки команд, которая является частью вашего выражения sed, происходит до выполнения команды sed.

Это означает, что оболочка для выполнения команды

sed "s/\(\".*\"\)/$(echo \\1 | sed 's/,//')/"

первые запуски

echo \\1 | sed 's/,//'

Это выводит \1, так как в строке, выводимой echo, нет запятых.

Затем оболочка вставляет эту строку вместо подстановки команды, что дает

sed "s/\(\".*\"\)/\1/"

Это также ясно, если мы запустим конвейер с включенной трассировкой в ​​оболочке:

$ set -x
$ echo 'something, "10,000", something' | sed "s/\(\".*\"\)/$(echo \\1 | sed 's/,//')/"
+ echo 'something, "10,000", something'
+ echo '\1'
+ sed s/,//
+ sed 's/\(".*"\)/\1/'
something, "10,000", something

Во втором конвейере происходит то же самое (за исключением выполненияsed 's/,//'):

$ set -x
$ echo 'something, "10,000", something' | sed "s/\(\".*\"\)/$(echo \\1)/"
+ echo 'something, "10,000", something'
+ echo '\1'
+ sed 's/\(".*"\)/\1/'
something, "10,000", something

В заключение :невозможно вызвать другую команду оболочки изнутри sedс использованием подстановок команд для обработки подстроки, соответствующей регулярному выражению, поскольку подстановки команд обрабатываются до sedвызывается (, чтобы решить, что представляет собой сценарий редактирования sedперед вызовомsed).

sedкроме того, не предоставляет на своем языке никакого механизма для вызова другой команды, как это делают некоторые другие языки редактирования/обработки (, например. элементарные команды rи wв редакторе edпозволяют это сделать, как иawk).

1
27.01.2020, 22:16
sed 's/\([0-9]\),\([0-9]\)/\1\2/g'

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

123,456,789 -> 123456789
12,34,56,78 -> 12345678
but
1,2,3,4,5,6 -> 12,34,56
0
27.01.2020, 22:16

Теги

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