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