Вы можете использовать другой символ для разделителя, как указывали другие, например:
sed -i 's!pattern!replacement!g' /path/to/file
Но если нет удобного символа для использования вместо /
в качестве разделителя, вы также можете избежать любых встроенных символов-разделителей в ваших pattern
и replacement
, поставив перед каждым из них обратную косую черту \
. Вот пример использования /
в качестве разделителя, который заменяет /some/path
на../some/replacement
:
sed -i 's/\/some\/path/..\/some\/replacement/g'
Тем не менее, людям труднее читать, поэтому, как правило, если это вообще возможно, лучше использовать другой символ для разделителя, подобного этому:
sed -i 's!/some/path!../some/replacement!g'
sort -nt '_' -k2
Выход:
file_0
file_1
file_2
file_3
file_4
file_5
file_6
file_7
file_8
file_9
file_10
file_11
file_12
file_13
file_14
file_15
или:
file_0.txt
file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
file_6.txt
file_7.txt
file_8.txt
file_9.txt
file_10.txt
file_11.txt
file_12.txt
file_13.txt
file_14.txt
file_15.txt
Протестировано с реализациями FreeBSD и GNU coreutils sort
, но не будет работать с реализацией busybox
. Все используемые варианты указано POSIX .
Ответ (один из них, я уверен )это:
sort -t _ -k 2 -g [filename with names+numbers or piped from another command with | - both situations will work ]
Пожалуйста, попробуйте:
output | awk '{print gensub("[^0-9]*","","g") " " $0 }' | sort -n | awk '{$1=""; print $0}' | sed 's/^ //g'
Это не самое элегантное решение, но оно работает.