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

みたいな

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

awk で (例: #4 行を削除)

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

PHP では、ファイルを反復して regex : で id を探す"#\d+$"か、行を空白で分割して、最後の要素が指定した一意の番号ではないことを確認できます。

于 2011-02-11T12:59:14.970 に答える
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 に答える
1

grep:

grep -v '#3$' filename

sed:

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

#3末尾に a がある行のみを削除します。

于 2011-02-13T01:23:28.100 に答える