好日子。我有個問題。我得到了指定內容的行。該命令grep允許搜索檔案指定的內容,但此行是逐行的。我想選擇各種行的內容。這該怎么做?某事作為
cat -n /etc/profile | grep "
if [ "$DISPLAY" != "" ]
then
xhost si:localuser:root
fi
"
非常感謝你。
uj5u.com熱心網友回復:
建議grep用 option進行研究-z。
但更好的選擇是awk.
可以awk選擇一個范圍awk '/RegExp1/,/RegExp2/' input.txt
在你的情況下:
awk '/if/,/fi/{print}' input.txt
將列印范圍內的所有行if fi。
也awk可以用RS變數定義記錄分隔符。例如記錄分隔符是空行。awk '1' RS="\n\n"
uj5u.com熱心網友回復:
最后,我解決了它,所以...
sed -i "$(cat -n /etc/profile | gawk '/if \[ "\$DISPLAY" != "" \]/,/fi/{print $1}' | tr '\n' ',' | sed 's/,$//g' | sed -E 's/,(. ),/,/g')d" /etc/profile
cat -n /etc/profile顯示檔案內容和行號27 if [ -d /etc/profile.d ]; then 28 for i in /etc/profile.d/*.sh; do 29 if [ -r $i ]; then 30 . $i 31 fi 32 done 33 unset i 34 fi 35 #start 36 if [ "$DISPLAY" != "" ] 37 then 38 xhost si:localuser:root 39 fi 40 #end感謝@Dudi Boy 這個命令
gawk '/if \[ "\$DISPLAY" != "" \]/,/fi/{print $1}'顯示指定部分的行。36 37 38 39現在我替換
\n了,:tr '\n' ','36,37,38,39,我洗掉最后一個逗號(,):
sed 's/,$//g'36,37,38,39并且只獲取用逗號 (,) 分隔的第一個和最后一個數字:
sed -E 's/,(. ),/,/g'36,39最后我在命令中執行它的結果
sed:sed -i "$(cat -n /etc/profile | gawk '/if \[ "\$DISPLAY" != "" \]/,/fi/{print $1}' | tr '\n' ',' | sed 's/,$//g' | sed -E 's/,(. ),/,/g')d" /etc/profile
結果是
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
#start
#end
非常感謝你
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/480498.html
