簡體   English   中英

使用awk或sed將管道定界符替換為空格

[英]replace a pipe delimiter with a space using awk or sed

我有一個用管道分隔的文件,帶有下面的示例行;

/u/chaintrk/bri/sh/picklist_autoprint.sh|-rwxrwxr-x|bdr|bdr|2665|Oct|23|14:04|3919089454
/u/chaintrk/bri/sh/generate_ct2020.pl|-rwxrwxr-x|bdr|bdr|15916|Oct|23|14:04|957147508

awk或sed是否有辦法將行轉換為輸出,如下所示,其中月份和日期之間的管道被空格替換了?

/u/chaintrk/bri/sh/picklist_autoprint.sh|-rwxrwxr-x|bdr|bdr|2665|Oct 23|14:04|3919089454
/u/chaintrk/bri/sh/generate_ct2020.pl|-rwxrwxr-x|bdr|bdr|15916|Oct 23|14:04|957147508

使用GNU sed:

sed -E 's/(\|[A-Z][a-z]{2})\|([0-9]{1,2}\|)/\1 \2/' file

輸出:

/u/chaintrk/bri/sh/picklist_autoprint.sh|-rwxrwxr-x|bdr|bdr|2665|Oct 23|14:04|3919089454
/u/chaintrk/bri/sh/generate_ct2020.pl|-rwxrwxr-x|bdr|bdr|15916|Oct 23|14:04|957147508

如果要“就地”編輯文件,請添加sed的選項-i

是的,可以更改“ |” 與空間。
真正的問題是確定要更改哪個字段。

那些總是第六和第七嗎? 如果是這樣,這可行:

awk -vFS='|' '{sub($6"|"$7,$6" "$7)}1' file

那些文本的Upper-lower-lower后跟1 or 2 digits嗎? 如果是這樣,其他工作原理:

gawk '{c="[|]([[:upper:]][[:lower:]]{2})[|]([0-9]{1,2})[|]";print gensub(c,"|\\1 \\2|",1,$0)}' file

暫無
暫無

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

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