Python, каналы и параметр «-c» в командной строке

#python #command-line #pipe

#python #командная строка #канал

Вопрос:

Я смутно припоминаю, что мог сделать что-то подобное в Python:

 cat foo | python -c "<some python code>" | grep blah | ... 
  

По какой-то причине я не говорю о том, как на самом деле использовать это для запуска кода Python в каждой строке входного файла. Допустим, я хотел бы изменить каждый экземпляр слова «apple» в исходном файле на «orange»; как бы я это сделал?

Ответ №1:

Я не понимаю, как это может быть полезно более одного раза, но вот однострочный:

 cat file | grep apple | python -c "for line in __import__('sys').stdin: print line.replace("apple", "orange"),"
  

Ответ №2:

Существует даже лучший способ, чем sed, который называется pyp. Работает следующим образом:

 pip install pyp
echo "apple, banana" | pyp "p.replace('apple', 'orange')"
  

Ответ №3:

Прочитайте ваши данные из sys.stdin или просто используйте ‘sed’.

Ответ №4:

Если вы используете оболочку Bash

 while read -r line
do
  line=${line//apple/orange/}
  echo "$line" 
done < file > tempfile amp;amp; mv tempfile file