używanie gsub w awk do zamiany słowa na nawiasy

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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *