sed命令删除一行
Sed Command to delete a line
我想删除与测试文件中指定模式匹配的行。我想在 linux shell 脚本中使用命令 sed /'lines to match'/d 。这是代码:
#Define input parameters
SCRIPT_NAME=$(basename [=10=])
PATHFILE=
NAMEFILE1=
NAMEFILE2=
HEADEREXPRESSION=
#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|CREATE|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
我想删除与测试文件中指定模式匹配的行。我想在 linux shell 脚本中使用命令 sed /'lines to match'/d 。这是代码:
#Define input parameters
SCRIPT_NAME=$(basename [=10=])
PATHFILE=
NAMEFILE1=
NAMEFILE2=
HEADEREXPRESSION=
#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|CREATE|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