[英]Multi-line regex should match multiple times in a file (one-line command if possible)
[英]Break a one-line file to a multi-line file, each line with the same number of words?
例如,單行文件line.txt
具有以下行:
741 12 3 24 45 123 32 111 34
假設每個單詞的字數為3
。 那么目標是:
741 12 3
24 45 123
32 111 34
在這種情況下,哪些腳本可以提供幫助,不勝感激。
這對於awk來說將是一件容易的事。 我也看到了vim
的問題,然后用vim
嘗試了一下。
假設光標在該行的開頭。 你可以嘗試(在鍵入NORMAL
模式):
100@='3f r^M'
然后輸入Enter
。
宏也可以由qn3f r<Enter>q
記錄,那么您只需100@n
注意
<CV><Enter>
的^M
cat your_file | tr " " "\n" | paste -s -d " \n"
嘗試這個
printf "%s %s %s\n" $(cat line.txt)
它產生
741 12 3
24 45 123
32 111 34
這是使用sed的方法。 將單詞數固定為3
,您可以執行以下操作:
sed 's/\( [^ ]* [^ ]*\) /\1\n/g' <filename>
如果要動態指定單詞數,可以使用以下腳本動態創建正則表達式:
#!/bin/sh
test $# -eq 2 || (echo "Usage: $(basename "${0}") <filename> <#words>" && exit 1)
for i in $(seq 2 "${2}"); do
REGEX=" [^ ]*${REGEX}"
done
cat "${1}" | sed "s/\\(${REGEX}\\) /\\1\n/g"
一種使用awk
:
awk '{
for ( i = 1; i <= NF; i++ ) {
printf "%s%s", $i, (i % 3 == 0) ? "\n" : " "
}
}' line.txt
它產生:
741 12 3
24 45 123
32 111 34
編輯以修復腳本(請參見注釋),用於多個字段(不是3的倍數):
awk '
{
for ( i = 1; i <= NF; i++ ) {
printf "%s%s", $i, (i < NF && i % 3 == 0) ? "\n" : " "
}
}
END { printf "\n" }
' infile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.