Zawartość source.txt
:
gold green white black blue
yellow magenta brown
tram kilo charlie tango
Cześć wszystkim! Muszę rozwiązać zagadkę.
Próbuję uruchomić mały skrypt, aby grep pliku source.txt
, grep
wyjście potoku, aby sed
zastąpić ciąg i zapisać tę linię w nowym plikupol.txt
grep -l "gold" source.txt | xargs sed 's/green/red/' > pol.txt
Zamiast mieć jedyną tę linię w pol.txt
:
gold red white black blue
Mam cały sam plik z ciągiem, który zastąpiłem
gold red white black blue
yellow magenta brown
tram kilo charlie tango
Kiedy -l
usuwam opcję z polecenia grep, mam to i oczywiście nic w pol.txt
sed: can't read gold: No such file or directory
sed: can't read green: No such file or directory
sed: can't read white: No such file or directory
sed: can't read black: No such file or directory
sed: can't read blue: No such file or directory
grep
jest potrzebny jako tester i niestety opcja „jeśli” nie jest opcją.
grep
i sed
razem - sed
sama prawdopodobnie prawdopodobnie może zrobić wszystko, co oba programy mogą zrobić razem. Jeśli masz problem z wieloma plikami wejściowymi i potrzebujesz przetworzyć tylko te, które zawierają „złoto”, prawdopodobnie powinieneś to wyjaśnić; w przeciwnym razie ludzie, którzy próbują odpowiedzieć na twoje pytanie, mają jedną rękę związaną za plecami. (Proszę nie odpowiadać w komentarzach; edytuj swoje pytanie, aby było jaśniejsze i bardziej kompletne.) Jak wyjaśnia Satya Mishra, grep -l "gold" source.txt
wyświetli source.txt
… (ciąg dalszy)
source.txt
nazwa pliku, nie ma mowy, aby proces po prawej stronie potoku wiedział, że chcesz, aby przetwarzał tylko linie zawierające „złoto”, chyba że wbudujesz to w polecenie (jak pokazuje John). (Jego komendę można trochę uprościć, aby sed -n '/gold/s/green/red/p' source.txt
. A jeśli potrafisz pisać sed 's/green/red/'
, czy to naprawdę jest tak „przerażające”, że utrzymanie go będzie „bolesne”?)
source.txt
zapisany plik? Wydaje mi się, że może to być pomieszanie między zwrotami karetki a pomieszaniem kanałów i linii.