Linux
在文件中的位置前添加空格
我在文件中有一個字元串:
7017556626 TEST BSAB 20191108 TEST123 3333 1111 BSAB 11 7007760674 TESTCHAS 20191108 TEST123 4444 5555 CHAS 22 7017556626 TEST 20191108 TEST123 3333 1111 CHAS 33 7017556626 TEST SSEQ 20191108 TEST123 2222 7777 BSAB 44 7007760674 TESTCHAS 20191108 TEST123 1111 0000 55
我需要在位置 16 之前添加空格
7017556626 TEST BSAB 20191108 TEST123 3333 1111 BSAB 11 7007760674 TEST CHAS 20191108 TEST123 4444 5555 CHAS 22 7017556626 TEST 20191108 TEST123 3333 1111 CHAS 33 7017556626 TEST SSEQ 20191108 TEST123 2222 7777 BSAB 44 7007760674 TEST CHAS 20191108 TEST123 1111 0000 55
我該怎麼做?
在
GNU sed
擴展模式下:sed -Ee 's/^(.{15})([^ ])/\1 \2/' file
用
GNU sed
另一種方法:sed -e ' h ; # hold a copy in case we need it s/./\n&/16; # place a marker before the 16-char in the current line /\n /g ; # in case the marker sees a space to its right, revert the changes s/\n/ / ; # in case not then remove the marker ' file
與
Perl
:perl -lpe '$_ = "@{[unpack q[A15A*]]}" if index($_," ",15) != 15' file
結果:
7017556626 TEST BSAB 20191108 TEST123 3333 1111 BSAB 11 7007760674 TEST CHAS 20191108 TEST123 4444 5555 CHAS 22 7017556626 TEST 20191108 TEST123 3333 1111 CHAS 33 7017556626 TEST SSEQ 20191108 TEST123 2222 7777 BSAB 44 7007760674 TEST CHAS 20191108 TEST123 1111 0000 55
與sed類似,您可以使用腳本編輯器
ed
:printf '%s\n' '1,$s/^\(.\{15\}\)\([^ ]\)/\1 \2/' 'wq' | ed -s file
這會在“靜默”模式下向 ed 發送兩個以換行符分隔的命令:
1,$s/^\(.\{15\}\)\([^ ]\)/\1 \2/
– 在每一行(1,$
是第 1 行到最後一行的範圍),執行搜尋和替換。從行首 (^
) 開始搜尋任意 15 個字元,後跟一個非空格字元;如果找到了,則將前 15 個字元分組為子表達式 #1,將非空格字元分組為子表達式 #2。將該文本替換為子表達式#1,一個空格,然後是子表達式#2——本質上,如果下一個字元不是空格,則在第 15 個字元之後放置一個空格。wq
– 將文件寫回磁碟並退出ed