У меня также есть этот принтер, таким образом, я записал драйвер, который можно использовать с ним.
Это - принтер GDI. Это использует PJL с изображениями JBIG1 для взаимодействия с хостом.
Можно загрузить этот драйвер с моей учетной записи GitHub, madlynx/ricoh-sp100.
Инструкции по установке:
Другой подход с использованием perl для удаления новых строк, которым предшествует \
и пробела:
$ perl -pe 's/\\\n/ /' file | grep XXX
thisXXX line has a continuation line
a multipleXXX continuation line
Чтобы удалить лишние пробелы, пройдите через sed:
$ perl -pe 's/\\\n/ /' file | grep XXX | sed 's/ */ /g'
thisXXX line has a continuation line
a multipleXXX continuation line
С помощью pcregrep
без изменения структуры строк:
pcregrep -M '^(.|\\\n)*XXX(.|\n)*?[^\\]$' file
с POSIX SED:
$ sed -e '
:1
/\\$/{N
s/\n//
t1
}
/\\/!d
s/\\[[:blank:]]*//g
' file
Я бы сказал Перл здесь самый простой . Это не POSIX, хотя по умолчанию он установлен в большинстве не встраиваемых юниксов. Если вы хотите POSIX, используйте awk.
awk '{if (/\\$/) printf "%s" $0; else print}'
Это рушит линии продолжения. Если вы хотите найти шаблоны, которые распространяются по продолжению, введите это в grep. Если необходимо найти только непрерывные детали, дайте awk собрать непрерывные линии и выполнить совпадение.
awk '{
if (sub(/\\$/,"")) {
line = line $0;
} else {
if (/XXX/) print;
line = "";
}
}'
Perl приходит на помощь:
perl -ne 'if (/\\$/) { $l .= $_ }
else { print $l, $_ if $l =~ /XXX/;
$l = "";
}' foo.txt
$ l
работает как аккумулятор. -n
обрабатывает ввод построчно (см. Sed), если строка заканчивается обратной косой чертой, она добавляется в аккумулятор, если нет, аккумулятор плюс строка печатается при условии, что она соответствует XXX, и аккумулятор опорожняется.
Мой поворот:
perl -0777 -ne ' # read the entire file into $_
s{ [[:blank:]]* \\ \n [[:blank:]]* } # join continued lines
{ }gx;
print grep {/XXX/} split /(?<=\n)/ # print the matching lines
' foo.txt
thisXXX line has a continuation line
a multipleXXX continuation line
Это небольшое улучшение решения Gilles awk (спасибо Gilles!), но требует nawk:
nawk '{if (/\\$/) {$0=substr($0,1,length($0)-2); printf "%s",$0} else print}'
Это создаст непрерывную строку, если перенос строки, но не включает символ «\» и пробел. (Я нашел это полезным при поиске с помощью команды PATH, поскольку "\" может привести к путанице при интерпретации результатов.)