Тип файловой системы — это третий столбец в /proc/mounts
; чтобы извлечь этот столбец, вы можете написать:
awk '{print $3}' /proc/mounts
Чтобы сделать это более конкретным, вам нужно сопоставить второй столбец с вашей точкой монтирования:
awk "\$2 == \"$mountpoint\" {print \$3}" /proc/mounts
Расширение подстановки команд, которая является частью вашего выражения 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
).
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