ls -l /sys/block/ | awk '$11 != "" && $11 !~ "^../devices/virtual" { print $9; }
В bash вы можете просто сделать:
$ echo "$a/$(sed -e 's/\//_/g'<<<"$b")"
first/second_third_fourth_...
Строка <<<
— это строка, и она просто (быстрая, но не -переносимая; bash поддерживает это, но многие другие оболочки )не позволяют передавать переменную в качестве входных данных для программы.
В качестве альтернативы:
$ echo "$a/$(tr '/' '_'<<<"$b")"
first/second_third_fourth_...
Вы можете попробовать это вbash
:
# NOT var x=...
a=first
b="second/third/fourth/"
# use another separator to avoid escaping backlashes, in this case a semicolon
echo "$a/$(echo "$b" | sed 's;/;_;g')"
Выход:
first/second_third_fourth_
]# echo $a $b
first sec/th/for/
]# echo $a/${b//\//_}
first/sec_th_for_
Найти место в man bash:/Param<Enter>nnnnn
для получения case -чутко к абзацуParameter Expansion .
echo "$a/$b" | sed 's:/:_:2g'
Использует GNU sed. Это изменяет все косые черты на подчеркивание, кроме первого.
Это эквивалентно приведенному ниже Posix sed, которое следует читать как :«пока вы не сможете заменить вторую косую черту на подчеркивание, продолжайте повторять».
sed -e ':a' -e 's:/:_:2' -e 'ta'