В любом случае мы можем изменить разделитель, который использует grep?
Я думаю, что по умолчанию grep использует \n
в качестве разделителя.
В любом случае мы можем изменить разделитель, который использует grep?
Я думаю, что по умолчанию grep использует \n
в качестве разделителя.
case $# in
0|1|2) cat >&2 <<EOF
Usage: $0 delimiterstring pattern files....
Behaves like grep -pdelimiterstring but on linux
DOES NOT SUPPORT MOST ARGUMENTS
unlike grep -p - leaves delimiterstring in output
NO -p just the delimeterstring
note: delimiterstring has to work in the sed command where the ${d} is
if you are going to use @ in the delimeter string, then the @'s
need to be replaced by someother character
EOF
exit 0
;;
3) mode=one ;;
*) mode=many ;;
esac
d="${1}"
p="${2}"
shift 2
while [ $# -gt 1 ]
do
sed "s@${d}@\x00@g" "${1}" | grep -z "${p}" - | (
case $mode in
many) sed -e "s@\x00@${d}@g" -e "s@^@${1}: @" ;;
*) sed -e "s@\x00@${d}@g" ;;
esac
)
shift
done
Если вы заботитесь только о выводе, tr
может работать для вас:
che@nok ~ $ grep cpu /proc/cpuinfo | tr '\n' ';'
cpu family : 6;cpu MHz : 800.000;cpu cores : 2;cpuid level : 10;cpu family : 6;cpu MHz : 800.000;cpu cores : 2;cpuid level : 10;
agrep
из Университета Аризоны позволяет установить разделитель. Это не полная замена для grep; он использует другой алгоритм (приблизительный grep, может соответствовать ошибкам) и имеет другой синтаксис шаблона. Но это удобный инструмент.
К сожалению, я думаю, что из-за проблем с лицензированием было несколько подобных проектов, называемых agrep
, и они не все совместимы. Но я думаю, что все версии позволяют установить разделитель.
Как это ? Любое использование?
grep file "search-string" |awk 'BEGIN{RS="\n";ORS="@"}{print}'
Установите «@» в соответствии с вашими потребностями.