Как напечатать динамическую строку с приоритетом - один лайнер

ls -l /sys/block/ | awk '$11 != "" && $11 !~ "^../devices/virtual" { print $9; }
0
05.03.2020, 14:19
6 ответов

В bash вы можете просто сделать:

$ echo "$a/$(sed  -e 's/\//_/g'<<<"$b")"
first/second_third_fourth_...

Строка <<<— это строка, и она просто (быстрая, но не -переносимая; bash поддерживает это, но многие другие оболочки )не позволяют передавать переменную в качестве входных данных для программы.

В качестве альтернативы:

$ echo "$a/$(tr '/' '_'<<<"$b")"
first/second_third_fourth_...
2
28.04.2021, 23:21
echo $b | sed -e 's/\//_/g' | xargs -i echo $a/{}
1
28.04.2021, 23:21

Вы можете попробовать это в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_
1
28.04.2021, 23:21

bash:

echo "$a/${b//\//_}"

zsh:

echo $a/${b:gs;/;_}
4
28.04.2021, 23:21
]# echo $a $b
first sec/th/for/

]# echo $a/${b//\//_}
first/sec_th_for_

Найти место в man bash:/Param<Enter>nnnnnдля получения case -чутко к абзацуParameter Expansion .

6
28.04.2021, 23:21
echo "$a/$b"  | sed 's:/:_:2g'

Использует GNU sed. Это изменяет все косые черты на подчеркивание, кроме первого.

Это эквивалентно приведенному ниже Posix sed, которое следует читать как :«пока вы не сможете заменить вторую косую черту на подчеркивание, продолжайте повторять».

sed -e ':a'   -e 's:/:_:2'     -e 'ta' 
0
28.04.2021, 23:21

Теги

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