, в то время как цикл чтения, кажется, прекращается после первой строки, при использовании двух труб?

Если вы знаете, где находится rpm, вы можете установить его напрямую через yum, не загружая его.

Например:

 yum install http://something.com/package1.rpm 
0
09.12.2018, 16:33
1 ответ

Ваш sedтрубопровод немного задом наперед:

sed 's/w/f/g' | sed 's/f/zzzzz/g' <<< "$line"

Это приведет к тому, что первый sedбудет читать из стандартного ввода, т. е. ваших строк 456и 789, а второй sedбудет читать$line(123). Канал остановит выход первого sedот получения куда-либо , поскольку второй sedне читает из него.

Я предполагаю, что вы хотите, чтобы первыйsedчитал строку, а второй sedсчитывал вывод первого.

Вы бы сделали это либо с

{ sed 's/w/f/g' | sed 's/f/zzzzz/g'; } <<< "$line"

или

sed 's/w/f/g' <<<"line" | sed 's/f/zzzzz/g'

Также обратите внимание, что в этом случае вы можете объединить два вызова sedв один:

sed 'y/w/f/; s/f/zzzzz/g' <<<"$line"

или,

sed -e 'y/w/f/' -e 's/f/zzzzz/g' <<<"$line"

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

Однако очень редко рекомендуется вызывать sedдля отдельных строк ввода. Если вам не нужен вывод echo, ваш скрипт можно упростить до

#!/bin/sh
sed 'y/w/f/; s/f/zzzzz/g'

или даже

#!/usr/bin/sed -f
y/w/f/
s/f/zzzzz/g
0
28.01.2020, 04:07

Теги

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