When reading a file line by line, if a command inside the loop also reads stdin, it can exhaust the input file.
Продолжить чтение здесь:Bash FAQ 89
Таким образом, код должен выглядеть так:
find. -name '*.m4a' -print0 | while read -d '' -r file; do ffmpeg -i "$file" -n -acodec libmp3lame -ab 128k "${file%.m4a}.mp3" < /dev/null done
С python
иBeautifulSoup
:
python -c '
from bs4 import BeautifulSoup
f = open("domain.txt", "r")
soup = BeautifulSoup(f.read(),"html.parser")
for span in soup.find_all("span"):
print(span.string)
'
Возможно, это будет немного излишне для вашей простой задачи, но будет работать намного лучше и будет проще в более сложных задачах, например. если у вас другой html, например:
<span>
aghahan.com
</span>
<span>
pouyamannequin.com
</span>
Поскольку каждая строка начинается с <span>
и заканчивается</span>
:
sed 's|<span>\(.*\)</span>|\1|' domain.txt
Вы также можете сделать это с помощью awk
, установив разделитель полей как <
или >
и распечатав третий столбец:
awk -F '[<>]' '{print $3}' domain.txt
Выход:
aghahan.com
pouyamannequin.com
Это самый простой способ, которым это можно сделать, и он также будет работать, если в конце строк есть пробелы.
awk -F ">" '{print $2}' filename| sed "s/<.*//g"
выход
aghahan.com
pouyamannequin.com