我有一個包含多行的文本文件。我將使用sed替換其中一行中的逗號分隔值。每行開頭都有一個ID(本質上是Record ID)。我需要通過使用ID來識別正確的行來修改。我曾考慮過逐行閱讀文件,直到找到它,但我很好奇是否有另一種方式?找到一條線並替換一個字符串
回答
sed -e '/^theID,/s/oldValue/newValue/'
啊!我會盡力的,謝謝! – Atomiklan
這是錯誤的,如果您當前的行ID是123並且給定的ID是2,那該怎麼辦? –
好點 - 已更新,因爲記錄ID在行的開頭,後面跟着一個,因爲該文件是CSV。 – user3392484
在awk或Perl可能是這種特殊情況下
這裏這更好的將取代「富」與這是由yourID第一列相匹配的線在你的文件「欄中的」
awk -F ',' '/yourID/ {gsub("foo", "bar", $2); print}' fileIn > fileOut
或perl oneliners,此處將第三列與第一列中與yourID匹配的「bar」交換。
perl -F',' -lane 'if(@F[0] =~ m/yourID/){ @F[2] = "bar"; print(join(", ", @F))}' fileIn > fileOut
更好地使用'eq'而不是'm //'! –
其他的解決方案似乎不可靠(ID沒有測試正確),所以這是我perl做到這一點的方法:
$ cat file
001,a,b,c
002,a2,b2,c2
$ perl -F, -lane '$F[0] eq "002" and $F[1] = "z"; print join ",", @F' file
001,a,b,c
002,z,b2,c2
如果您要更換的部份文件IN-將,你可以添加-i
開關,所以:
$ perl -i -F, -lane '$F[0] eq "002" and $F[1] = "z"; print join ",", @F' file
但正確的CSV像Perl的Text::CSV解析器建議立即進行刪除d實際上在這裏使用。
- 1. 找到一個字符串並替換?
- 2. Java:查找並替換一條線
- 3. 找到一個字符串,並更有效地替換它
- 4. 在一個文件中找到並替換Unix字符串
- 5. NSFilehandle並替換一條線
- 6. 用一個字符串找到一行並用另一行替換整行
- 7. 查找字符串並批量替換下一個字
- 8. mysql找到並替換字符串
- 9. 找到並替換字符串
- 10. Bash找到並替換字符串
- 11. 替換一個字符串。
- 12. find/sed找到一個文件並替換一個子字符串
- 13. 查找一個子字符串並替換SQL中的整個字符串
- 14. 從一個陣列替換字符到另一個字符串
- 15. unix找到並替換多個字符的字符串
- 16. Perl一次性查找並替換多個(巨大)字符串
- 17. 查找一個字符串並替換爲相應的值
- 18. 查找模式並替換爲另一個模式字符串
- 19. PHP找到並替換字符串中的字符串
- 20. Javascript查找並替換一組字符?
- 21. 用一個StringBuffer子字符串替換一個子字符串
- 22. 有條件地替換字符串的最後一個字符
- 23. 在一條線上替換一個字符之前另一特定字符
- 24. 獲取一個字符串,並用新的替換一個div
- 25. 多串用一個字符串替換
- 26. 讀取一個字符串直到關鍵字,並用UNIX中的另一個字符串替換字符
- 27. 替換一個字符串直到幷包括OS X中的另一個字符串的第一個實例
- 28. 用另一個字符串替換字符串的一部分
- 29. 如何找到一個線串並刪除整條生產線
- 30. 查找並替換多行字符串
sed是完美的。如果沒有更多的細節,很難更具體。 – AlG