Cześć, jak mogę użyć gsub do zastąpienia słowa z nawiasami.
Tutaj Chcę zamienić ABC (T) na ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Odpowiedź
Całość można uprościć, używając formatu // dla gsub:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Następnie możesz uprościć dalej, używając print bez argumentów (co jest tym samym co print $0) lub skrót 1 do drukowania (domyślna akcja awk dla wyrażeń, których wynikiem jest prawda, takich jak 1; ma wydrukować bieżącą linię):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Osobiście nie użyłbym jednak awk w tym celu składnia jest krótsza i bardziej przejrzysta w przypadku innych narzędzi:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Odpowiedź
Byliście bardzo blisko. Potrzebujesz tylko dwóch \. Dzieje się tak, ponieważ jeden z zestawów jest przeznaczony dla samego tekstu przechodzącego przez BASH, a drugi byłby rzeczywistym \, który jest analizowany przez awk. Wydaje mi się, że to działa:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
I daje:
ABC/G