0

我想删除行尾具有唯一 ID 的行。如何删除该行?php中有sed或awk的实现吗?我的文件结构如下

1 0 * * * echo -n "cron 1" > /www/apache/logs/error_log #1
0 */2 * * * /home/user/test1.pl #2
1 0 * * * echo -n "cron 2" > /www/apache/logs/error_log #3
0 */2 * * * /home/user/test2.pl #4
1 0 * * * echo -n "cron 3" > /www/apache/logs/error_log #5
0 */2 * * * /home/user/test3.pl #6

在上面的示例中,唯一 id 位于每行的末尾,带有“#”,后跟整数 id 值。如何通过唯一键识别来删除一行?谢谢。

4

4 回答 4

1

使用 awk,(例如删除 #4 行)

awk -v uniq="#4" '$NF!~uniq' file > temp && mv temp file

在 PHP 中,您可以迭代文件并使用 regex : 查找 id "#\d+$",或者您可以在空白处拆分行并检查最后一个元素是否不是您指定的 uniq 编号。

于 2011-02-11T12:59:14.970 回答
1

喜欢

foreach($lines as $line){
    if(preg_match("/#(\d+)/$"), $line, $matches) && ($matches[1]==$drop_line_num)){
        #DON'T write line in output file
    }else{
        #write line to output file
    }
}
于 2011-02-11T13:05:18.933 回答
1

grep

grep -v '#3$' filename

sed

sed -e '/#3$/d' filename

仅删除#3末尾带有 a 的行。

于 2011-02-13T01:23:28.100 回答
1

裸 PHP 就可以了。

function removeTaggedLine ($tag, $file_name)
{
    $lines = preg_grep ("/#$tag$/", file ($file_name, FILE_IGNORE_NEW_LINES), PREG_GREP_INVERT);
    file_put_contents ($file_name, join ("\n", $lines) . "\n");
}

removeTaggedLine ('3', 'name of the file');
于 2011-02-13T02:36:15.457 回答