bugfix> sed > 投稿

RSSフィードを解析し、行の情報を圧縮して、エントリの日付と時刻を保持しようとしていますが、制限されているxscreensaverテキストクロールにファイルを供給するため、ミリ秒や無駄なスペースはありません。読みやすい画面幅。コードを変更して、テキストが書式設定されるまで2つの見出し行を追加しないようにすることもできます。アイデアをありがとう...

The input file at this point looks like this:
ABC World News Feed
RSS Data retrieved from https:--abcnews.go.com-abcnews-headlines
05-24 18:48:16    Truckers' strike leads to fuel shortages in Brazil
05-24 18:48:16    The marathon atop the world's deepest lake
           ^^^^^^
           Remove these character positions starting from 12 to 17 
           from each title line, with colon in 12 but not from the heading lines
So the result should look like:
ABC World News Feed
RSS Data retrieved from https:--abcnews.go.com-abcnews-headlines
05-24 18:48 Truckers' strike leads to fuel shortages in Brazil
05-24 18:48 The marathon atop the world's deepest lake

回答 2 件
  • 私の考えは、コロンの後に2桁の数字が続き、少なくとも1つのスペースが1つのスペースに置き換わることです。

    $ sed 's/:[[:digit:]][[:digit:]]  */ /' file
    ABC World News Feed
    RSS Data retrieved from https:--abcnews.go.com-abcnews-headlines
    05-24 18:48 Truckers' strike leads to fuel shortages in Brazil
    05-24 18:48 The marathon atop the world's deepest lake
    
    

    位置について本当に特定したい場合は、 ^ で検索を固定できます。  行の先頭に移動し、後方参照 \1 で括弧を使用します 。ここでドット .  任意の文字に一致します:

    $ sed 's/^\(..-.. ..:..\):[[:digit:]][[:digit:]]  */\1 /' file
    ABC World News Feed
    RSS Data retrieved from https:--abcnews.go.com-abcnews-headlines
    05-24 18:48 Truckers' strike leads to fuel shortages in Brazil
    05-24 18:48 The marathon atop the world's deepest lake
    
    

  • フォロー中  ここであなたを助けるかもしれません。

    awk
    
    

    Input_file自体に出力を保存する場合は、 awk '$2 ~ /[0-9]+:[0-9]+:[0-9]+/{sub(/:[0-9]+ +/,OFS)} 1' Input_file を追加します  上記のコマンドでも。

    説明: ここにも説明を追加します。

    > temp_file && mv temp_file Input_file
    
    
    awk ' $2 ~ /[0-9]+:[0-9]+:[0-9]+/{ ##Checking condition here if 2nd field is matching digit colon digit colon digit pattern then do following. sub(/:[0-9]+ +/,OFS) ##Using substitute function of awk to substitute colon digit(s) then space with OFS whose default value is space in current line. } 1 ##awk works on method of condition and then action, so making condition TRUE here and not mentioning action so print will happen. ' Input_file ##Mentioning Input_file name here.

あなたの答え