Używam ubuntu 14.4
i próbuję przekierować wyjście grep
polecenia do pliku, ale ciągle pojawia się ten błąd:
grep: input file 'X' is also the output
Szukałem tego problemu i właśnie dowiedziałem się, że był to błąd, o którym ubuntu 12.4
nie ma żadnego opisu. Czy ktoś może mi pomóc w rozwiązaniu tego problemu?
Uruchomię następujące polecenie:
grep -E -r -o -n r"%}(.*){%" > myfile
shell
ubuntu
command-line
grep
io-redirection
Kasramvd
źródło
źródło
grep pattern file > file
to nie działa. Nie można użyć tego samego pliku jako danych wejściowych i wyjściowych dla grep.bash: ../f.txt: Permission denied
grep
w poleceniugrep pattern file > file
widzi już pusty plik, więc nie ma nic jako danych wejściowych. Jednak jeśli użyjesz>>
zamiast>
tego, plik nie jest pusty, ale grep i tak zgłasza błąd, ponieważ może to prowadzić do cyklicznego przetwarzania tej samej linii (wzorca) w kółko.Odpowiedzi:
Nie można użyć tego samego pliku jako wejścia i wyjścia dla
grep
. Możesz rozważyć następujące alternatywy:plik tymczasowy
sed
wstaw cały plik do zmiennej (nie jest to świetny pomysł dla dużych plików)
źródło
sed -i '/pattern/!d' file
sed -i -n 's/.*\(pattern\).*/\1/p' file
sed
również dopracować składnię.Możesz użyć
--exclude
pola w swoimgrep
poleceniu w następujący sposób:źródło
myfile
jest unikalny, ponieważ dotyczy tylko nazwy pliku pliku. Nie chcesz pomijać plików o tej samej nazwie w innych katalogach.Znalazłem sposób na bash:
cat >> IN_OUTPUT_FILE <<< "$(grep something IN_OUTPUT_FILE)"
Polecenie
<<<"..."
zostanie wykonane jako pierwsze.źródło