Это должно быть портативно и работать с именами файлов, содержащими пробелы, новые строки или другое нечетное продвижение символов к известно капризному ls поведению.
filename="whatever file name"
find . -name "$filename" -exec sh -c 'ls -di "$0" | head -1' {} \;
Если это - единственная проблема, я соглашаюсь с @Kevin; если бы весь канал является non-UTF-8, я, возможно, посмотрел бы на tr -cd SET
удалить все символы не в НАБОРЕ, или iconv -f (encoding) -t utf-8
если Вы знаете кодирование канала.
tr -d '©'
работы для простого удаления его.
Если Вы хотите заменить его строкой, можно использовать
sed 's/©/(c)/g'
tr
работы над уровнем байта, не на символ. Это означает это tr -d '©'
сделает разные вещи в зависимости от который локаль tr
выполняется в. Например, типичные 'отклоняют локаль средств UTF-8 это ©
твердость к 2 байтам '\xC2' и '\xA9'.. tr
удалит все случаи любого байта... Это удалит '\C2' из §
и '\A9' от é
, и от любой из многих других возможностей.
– Peter.O
19.11.2011, 05:43
tr
проложивший себе путь.
– Ladadadada
19.11.2011, 17:37
tr
безопасно, если Вы хотите удалить вниз к ASCII или подмножеству этого: 8-й бит установлен, если и только если каждый смотрит на многобайтовое представление. – Ulrich Schwarz 20.11.2011, 10:28