если еще оператор

Любой ответ будет зависеть от того, что вы можете знать о вашем входе.

Если вы знаете, что вы хотите, чтобы второй BAR3 , окруженный , , вы могли бы сделать:

perl -pe 's#(.*bar3.*)(bar3)#$1<font style=BACKGROUND-COLOR:red>$2</font>#' file

или

sed 's#\(.*bar3.*\)\(bar3\)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file

или, с GNU SED :

sed -r 's#(.*bar3.*)(bar3)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file

Если вы хотите изменить все вхождения BAR3 , которые падают между A > и < (без < Между ними) вы можете сделать:

perl -pe 's#(>[^<]*)(bar3)([^<]*<)#$1<font style=BACKGROUND-COLOR:red>$2</font>$3#' file

или

sed 's#\(>[^<]*\)\(bar3\)\([^<]*<\)#\1<font style=BACKGROUND-COLOR:red>\2</font>\3#' file

или, с GNU SED

sed -r 's#(>[^<]*)(bar3)([^<]*<)#\1<font style=BACKGROUND-COLOR:red>\2</font>\3#' file

, если вы хотите заменить любой BAR3 , который начинается на 33-й позиции строки, вы Можно сделать:

perl -pe 's#(.{32})(bar3)#$1<font style=BACKGROUND-COLOR:red>$2</font>#' file

или

sed 's#\(.\{32\}\)\(bar3\)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file

или, с GNU SED

sed -r 's#(.{32})(bar3)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file

Есть другие варианты, конечно, но они всегда будут зависеть от именно то, что вы можете быть уверены о ваших входных данных.

-1
26.02.2015, 20:36
2 ответа

я не знаю, ясно ли это, но вы можете прерывать петлю, когда вы используете разрыв и выход

set -A arrs a b c d

num=`expr ${#arrs[*]} - 1`

for x in `seq 0 $num`
do

    var1=`some command here`
    var2=`some command here`
    var3=`some command here`

    if [[ "$var1" == "$var2" && "$var3" == "0" ]]
    then

        #do something here

    elif [[ "$var1" == "$var2" && "$var3" != "0" ]]
    then

        echo "\nContinue?"
        echo "[y/n]:\c"
        read yes_no

        case $yes_no in
            [yY])
                echo "You answer yes."
                echo "Some text that will go to the text file" >> some_text.txt
                break
                ;;
            [nN])
                echo "you answered  no"
                exit
                ;;
            *)
                echo "\nTry again"
                ;;
        esac

    elif [[ "$var1" != "$var2" && "$var3" == "0" ]]
    then

        echo "\nContinue?"
        echo "[y/n]:\c"
        read no_yes

        case $no_yes in
            [yY])
                echo "You answer yes"
                echo "Some text that will go to the text file" >> some_text.txt
                break
                ;;
            [nN])
                echo "you answered  no"
                exit
                ;;
            *)
                echo "\nTry again"
                ;;
         esac

    else

        echo "Do back flip"
        exit

    fi

done
0
28.01.2020, 05:11

Вы добавили break в инструкцию yes , поэтому она выходит из for-loop и поэтому не завершает тестирование остальной части массива. Просто удалите break из заявления «да».

Я проверил с некоторыми модификациями к вашему кодексу и получил то, чему я верю, ваши ожидаемые результаты:

#!/bin/sh

arrs=(a b c d)

num=`expr ${#arrs[*]} - 1`

for x in `seq 0 $num`
do

var1=`echo "hi"`
var2=`echo "hi"`
var3=`echo "hi"`

echo "var1 equals: $var1"
echo "var2 equals: $var2"
echo "var3 equals: $var3"


if [[ "$var1" = "$var2" && "$var3" = 0 ]]
then

        #do something here
        echo "First check"

elif [[ "$var1" == "$var2" && "$var3" != 0 ]]
then

         echo "\nContinue?"
         echo "[y/n]:\c"
         read yes_no

         case $yes_no in
         [yY])
           echo "You answer yes."
           echo "Some text that will go to the text file" >> some_text.txt
         ;;
        [nN])
           echo "you answered  no"
         exit
        ;;
        *)
          echo "\nTry again"
        ;;
        esac

elif [[ "$var1" != "$var2" && "$var3" == 0 ]]
then

         echo "\nContinue?"
         echo "[y/n]:\c"
         read no_yes

          case $no_yes in
          [yY])
           echo "You answer yes"
           echo "Some text that will go to the text file" >> some_text.txt
        ;;
        [nN])
           echo "you answered  no"
          exit
         ;;
         *)
            echo "\nTry again"
         ;;
         esac

else
        echo "Do back flip"
        exit
fi

done

Продукция (да тест):

[root]# sh test.sh
var1 equals: hi
var2 equals: hi
var3 equals: hi
\nContinue?
[y/n]:\c
y
You answer yes.
var1 equals: hi
var2 equals: hi
var3 equals: hi
\nContinue?
[y/n]:\c
y
You answer yes.
var1 equals: hi
var2 equals: hi
var3 equals: hi
\nContinue?
[y/n]:\c
y
You answer yes.
var1 equals: hi
var2 equals: hi
var3 equals: hi
\nContinue?
[y/n]:\c
y
You answer yes.

Продукция (никакой тест):

[root]# sh test.sh
var1 equals: hi
var2 equals: hi
var3 equals: hi
\nContinue?
[y/n]:\c
n
you answered  no
1
28.01.2020, 05:11

Теги

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