Как выполнить поиск в текстовом файле с помощью команды grep / поиска, чтобы в результатах отображалась первая строка со строкой, а затем все остальные строки до последней строки со строкой?
Итак, если у меня есть файл, который выглядит так:
А
А
B
C
C
B
А
А
И я выполняю эту команду, ища "B", она даст:
B
C
C
B
еще одна альтернатива, чтобы доказать, что Unix имеет больше способов, чем один, чтобы снять шкуру с кошки;) (преобразован в многострочный для удобства чтения, но может быть преобразован обратно в однострочник):
$ FILE=/etc/passwd
$ SEARCH4=daemon
$ tail -n +$(grep -i $SEARCH4 -m 1 -n $FILE | cut -d: -f1) $FILE
Это не командная строка, а небольшая функция, которая может вам помочь (bash в Linux):
function grepbetween {
match=$(grep -n "$1" "$2" | sed -e 's/:.*//')
nolines=$(echo $match | wc -w)
if [ $nolines -gt 1 ]
then
init=$(echo $match | cut -f1 -d" ")
end=$(echo $match|cut -f${nolines} -d" ")
nolines=$(wc -l "$2" | awk '{print $1}')
startline=$((nolines-init))
betweenlines=$((end-init))
cat $2 | tail -${startline} | head -${betweenlines}
fi
}
Пример его вывода:
[jbuser@jbossserver configuration]$ grepbetween extensions standalone.xml
<extension module="org.jboss.as.clustering.infinispan"/>
<extension module="org.jboss.as.connector"/>
<extension module="org.jboss.as.deployment-scanner"/>
<extension module="org.jboss.as.ee"/>
<extension module="org.jboss.as.ejb3"/>
<extension module="org.jboss.as.jaxrs"/>
<extension module="org.jboss.as.jdr"/>
<extension module="org.jboss.as.jmx"/>
<extension module="org.jboss.as.jpa"/>
<extension module="org.jboss.as.jsf"/>
<extension module="org.jboss.as.logging"/>
<extension module="org.jboss.as.mail"/>
<extension module="org.jboss.as.naming"/>
<extension module="org.jboss.as.pojo"/>
<extension module="org.jboss.as.remoting"/>
<extension module="org.jboss.as.sar"/>
<extension module="org.jboss.as.security"/>
<extension module="org.jboss.as.threads"/>
<extension module="org.jboss.as.transactions"/>
<extension module="org.jboss.as.web"/>
<extension module="org.jboss.as.webservices"/>
<extension module="org.jboss.as.weld"/>
</extensions>
я хотел бы использовать sed
:
sed -n '/B/,/B/p' file