Чтение из файла и возврата новой строки с циклом

Ознакомьтесь с разделом «Поддерживаемые библиотеки» в https://gcc.gnu.org/wiki/InstallingGCC . Мне удалось собрать gcc 5.3 на Centos 6.5, выполнив

./contrib/download_prerequisites 

, упомянутый в приведенном выше документе.

2
13.11.2018, 20:14
3 ответа

Нельзя писать в тот же файл, я бы рекомендовал создать новый файл и потом переименовать его.

tmpFile="/tmp/foo2.txt.tmp"

cat /tmp/foo.txt | while read line; do
      isSlash=$(echo $line | cut -d ":" -f2 | awk '{print $1}' | grep -c ^"/")
      if (( $isSlash )); then
          echo "$line ;try" >> $tmpFile
      else 
          echo "$line ;pass" >> $tmpFile
      fi
done

mv $tmpFile /tmp/foo.txt
0
27.01.2020, 22:17

Вы можете использовать awk, что позволяет очень легко выполнить то, что вы хотите:

awk '!/D: *\//{print $0 " ;pass"; next} {print $0 " ;try"}' foo.txt

Выход:

xxx B=C     D: A ;pass
yyy F=H     D:A ;pass
zzz K=L     D:  A ;pass
fff M=H     D:/llll ;try
kkk S=D     D: /kkkkk ;try

Это в основном соответствует каждой строке , не содержащейD:и /, и добавляет к ней ;pass, а затем переходит к следующей строке. В противном случае он добавляет к нему ;try.

1
27.01.2020, 22:17

sedХорошо?

$ sed '/D: *A/ s/$/\t;pass/; /D: *\// s/$/\t;try/' file
 xxx B=C     D: A   ;pass
 yyy F=H     D:A    ;pass
 zzz K=L     D:  A  ;pass
 fff M=H     D:/llll    ;try
 kkk S=D     D: /kkkkk  ;try
0
27.01.2020, 22:17

Теги

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