4
A
回答
3
如果以數字開頭(第一行除外),您可以更智能一些,並在行前打印新行;
awk 'BEGIN{ORS="";} NR==1 { print; next; } /^[[:digit:]]/ { print "\n"; print; next; } { print; }'
awk的腳本:
BEGIN { ORS=""; } # default: no newline between output records
NR==1 { print; next; } # first line: print
/^[[:digit:]]/ { print "\n"; print; next; } # if starts with a digit: print newline before
{print;} # other lines (next; has not been called yet)
-1
使用 'sed的' A溶液:
輸入文件(infile中):
1 test
test
2 two
3 three
4 four
five
six
7 seven
eight
9 nine
'桑達' 程序(script.sed ):
/[0-9]\+/ {
: a
N
/\n[0-9]\+/ {
P
s/.*\n//
}
t a
}
y/\n//
執行:
$ sed -f script.sed infile
輸出:
1 test test
2 two
3 three
4 four five
six
7 seven eight
9 nine
0
這是非常簡單的使用sed來完成。考慮下面
$ cat numbered
1 abc
def
ghi
2 jkl
mno
3 pqr
4 stu
vxw
命令sed '/^[0-9]/{N; s/\n/ /;}' numbered
文件就可以了:
$ sed '/^[0-9]/{N; s/\n/ /;}' numbered
1 abc def
ghi
2 jkl mno
3 pqr 4 stu
vxw
它是如何工作的:首先,如果當前行不以數字開頭它驗證:
/^[0-9]/
/^[0-9]/
是address並僅匹配以數字開頭的行。如果某行與它匹配,則地址後面的命令將被執行。
在這種情況下,該命令是一個{
,它打開一個函數列表。函數列表將聚合兩個或更多的命令,就好像它們只有一個一樣。在這種情況下,我們在函數列表中有兩個命令。第一個是在N
命令:
N
此命令追加一個新行和下一行的模式空間。在當前週期後,下一行將不再考慮。下一個命令是s///
其通過空間替換換行符:
s/\n//
因此,通過所附N
換行符將由空間來代替。然後,我們只需要關閉功能列表}
。其結果將是:
/^[0-9]/{
N
s/\n//
}
既然我已經把所有的命令在一行爲了簡潔,功能列表中的命令應該用分號來分隔:
/^[0-9]/{N;s/\n/ /;}
注意,如果線路出發由一位數字跟隨以數字開頭的另一行,下一行將加入前一行,並且該命令將應用於該行。
5
相關問題
- 1. 刪除行以「;」開頭
- 2. 正則表達式:刪除不以數字開頭的行
- 3. 如何刪除所有不以某些字符開頭的行?
- 4. 如果以某個字開頭,則從數據框中刪除整行:R
- 5. 如何刪除一個以名字的第一個字符開頭的行?
- 6. 刪除所有以數字開頭的行使用python
- 7. 如何刪除以R中的特殊字符開頭的行
- 8. 如何刪除以「 - 」開頭的行加上3行後
- 9. 如何刪除文件行開頭的數字
- 10. 如果下一行以特定單詞開頭,則應該打印上一行
- 11. 刪除在rails字符串中以>開頭的行
- 12. 刪除行如果H欄包含以下任一值 - VBA
- 13. 如果鏈接不以htttp開頭,Firefox會刪除href屬性://
- 14. 如何刪除空格和新行,僅在textarea開頭
- 15. 如果列以特定模式開頭,則刪除PostgreSQL中的行
- 16. 的sed +刪除以###開頭包括行開始和###
- 17. 如何刪除unix sh中以「string」開頭的所有行?
- 18. 如何刪除以特定字符串開頭但在該行保留一個特定字的行?
- 19. 刪除不以「Builder」開頭的文件
- 20. 如果第一個字符以#開頭,則Vim不能縮進(>>)行。#
- 21. postgresql刪除字符開頭
- 22. 刪除行更新,如果衝突
- 23. 如何查找以特定字母開頭並刪除該行的單詞?
- 24. 刪除表中的一行,如果它不包含關鍵字
- 25. 打印行如果行以字母表中的任何字母開頭
- 26. 如果文本以這些字符開頭或結尾,請刪除字符
- 27. 搜索以短語開頭並與下一行交換的行?
- 28. 如果字段重複,則刪除行
- 29. 刪除所有首選項以進行下一次更新
- 30. 刪除,如果行數少於兩到下一個換行符值
你可以用'tr'像'TR「\ n '''
Rahul
但我怎麼ch eck如果下一行沒有開始寬度數字?然後刪除以前的換行符。所有的事情可以分開,但我不能把它們結合起來。 – justahuman