簡體   English   中英

sed命令刪除行

[英]Sed Command to delete a line

我想刪除與測試文件中的指定模式匹配的行。 我想在Linux shell腳本中使用命令sed /'lines to match'/ d。 這是代碼:

#Define input parameters
SCRIPT_NAME=$(basename $0)
PATHFILE=$1
NAMEFILE1=$2
NAMEFILE2=$3
HEADEREXPRESSION=$4
#Define input file
INPUTFILE1=$PATHFILE$NAMEFILE1
INPUTFILE2=$PATHFILE$NAMEFILE2
TEMPFILE=${INPUTFILE2}_TMP
touch $TEMPFILE
echo $INPUTFILE2
echo $HEADEREXPRESSION
echo $TEMPFILE 
#Remove header line from the second document
sed '/${HEADEREXPRESSION}/d' $INPUTFILE2 >> $TEMPFILE 
#rm -f $INPUTFILE2   
#echo $TEMPFILE >> $INPUTFILE1

在這段代碼中,我想從測試文件的第一行中刪除與變量HEADEREXPRESSION內的表達式匹配的內容。 然后將結果放置在tmp變量中。
這是文本文件:

$ SYSDATE $ | PARENT_ELID | PARENT_ID_NUMBER | PARENT_REV | PARENT_LASTUPDATE_DATE | CHILD_ELID | CHILD_ID_NUMBER | CHILD_REV | CHILD_STATE | CHILD_LASTUPDATE_DATE | TSITEM | QUANTITY_DMS | OPTION_NAME |
2016/03/09 05:00:11 | AQJ2DJTH | 185273-13 | NC | 2016/03/09 01:56:14 | AQJ2DJTL | 185273-14 | NC | RELEASED | 2016/03/09 01:49:58 | 1 | 1 ||
2016/03/09 05:00:11 | AQJ2DJTL | 185273-14 | NC | 2016/03/09 01:49:58 | AZEUQ03Z0047AR | 185273-15 | A | RELEASED | 2003/01/15 09:46:18 | 1 | 1 ||
2016/03/09 05:00:11 | C3PK881C6A5JK0 | 201200-142 | M | 2016/03/09 03:20:26 | C3PK881BU135M0 | 201200-142EX | NC | RELEASED | 2016/03/09 03:21:26 | 1 | 1 ||
2016/03/09 05:00:11 | C3PK881C6A5JK0 | 201200-142 | M | 2016/03/09 03:20:26 | C3PK881BU2HVF0 | 201200-142RL | NC | RELEASED | 2014/07/23 09:35:14 | 1 | 1 | 1 |
2016/03/09 05:00:11 | BU9WPBTYLTYC60 | 3112535-02 | NC | 2016/03/09 04:58:35 | BU9WPBTYMATB60 | 3112865-02 | NC |創建| 2016/02/26 02:40:14 | 101 | 1 ||
2016/03/09 05:00:11 | BU9WPBTYLTYC60 | 3112535-02 | NC | 2016/03/09 04:58:35 | DN09DMYM1ROY70 | 3112892 | NC | RELEASED | 2011/05/13 21:09:16 | 102 | 1 ||
2016/03/09 05:00:11 | BU9WPBTYLTYC60 | 3112535-02 | NC | 2016/03/09 04:58:35 | DN09DMYM2CRJP0 | 3112897 | D2 | RELEASED | 2011/07/24 13:41:16 | 103 | 1 ||
2016/03/09 05:00:11 | BU9WPBTYLTYC60 | 3112535-02 | NC | 2016/03/09 04:58:35 | DN09DMYL210V60 | 1900169-1205 | NC | RELEASED | 2011/06/02 08:14:33 | 104 | 2 ||

我想使用模式表達式刪除第一行:

$SYSDATE$|PARENT_ELID|PARENT_ID_NUMBER|PARENT_REV|PARENT_LASTUPDATE_DATE|CHILD_ELID|CHILD_ID_NUMBER|CHILD_REV|CHILD_STATE|CHILD_LASTUPDATE_DATE|TSITEM|QUANTITY_DMS|OPTION_NAME|

我使用以下命令行命令調用此腳本:

./delete_headeer.sh /wmextdata/scripts/DEV/primavera/SS_IPP_SOSLOAD/ SSP6_LINKS.TXT-20160309-000341 SSP6_LINKS.TXT-20160309_121000 "\$SYSDATE$|PARENT_ELID|PARENT_ID_NUMBER|PARENT_REV|PARENT_LASTUPDATE_DATE|CHILD_ELID|CHILD_ID_NUMBER|CHILD_REV|CHILD_STATE|CHILD_LASTUPDATE_DATE|TSITEM|QUANTITY_DMS|OPTION_NAME|"

但是,與模式匹配的第一行不會在輸出文件中刪除。 我該如何解決這個問題?

您可以使用以下sed命令從文件中刪除模式

sed -i.bak "/$pattern/d" $FILE_NAME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM