比如说原文件是:
- Name:"AAA"
- Age:"20"
- Name:"BBB"
- Age:"30"
需要实现
1.匹配所有- Name 这一行
2.提取 name ( AAA/BBB 等)
1-2 步可以用 while read line
3.根据 name 去参考表里面抓取性别
这个用 awk
4.并在其后第 3 行添加一行性别信息
(这个我就不知道了,求助各位)
效果如下:
- Name:"AAA"
- Age:"20"
- Gender:"F"
- Name:"BBB"
- Age:"30"
- Gender:"M"
1
morefreeze 2015-10-09 10:00:32 +08:00
这种还要救助另一个字典(就是查性别)还是写个脚本去处理吧,比如 py,php 都行,用 awk 硬上的话特别恶心
同时关注大神来补充 |
2
imdjh 2015-10-09 10:00:40 +08:00 via Android
原文件是 yml 结构的?这当然是题外话
可以这样(思路,没验证): sed -i '/^Age(.*)$/Age$1\nGender:"X"/' path/to/file |
3
zhantss 2015-10-09 10:30:35 +08:00
1 、循环外面做个标记记下行数,读到-Name 时把之前抓取的性别 sed 插入到标记行前就行了
2 、把 Name 后面的换行换成制表符,每行加上制表符之后,逐行加性别,最后替换掉所有的制表符为换行 |
4
joyeblue 2015-10-09 10:52:36 +08:00
|
5
yangtukun1412 2015-10-09 11:56:35 +08:00
用 sed 简单实现的...最大的问题在于会多次替换原文件...效率太差...
#!/bin/bash cat test.txt | grep -Po '(?<=Name:").*(?=")' | while read line do gender=`get gender from other file` echo $line sed -i '/Name:"'"$line"'"/{n; a\- Gender:"'"$gender"'" }' test.txt done |
6
henryon 2015-10-09 13:09:29 +08:00
ls 的威武,环视正则,
|
7
rootit 2015-10-11 23:30:35 +08:00
[root@ALS_Free ~]# cat 1.sh
- Name:"AAA" - Age:"20" - Name:"BBB" - Age:"30" 1 [root@ALS_Free ~]# awk '/- Name/{print $0}' 1.sh - Name:"AAA" - Name:"BBB" 2 [root@ALS_Free ~]# awk -F "[: ]+" '/- Name/{print $3}' 1.sh "AAA" "BBB" 3 题意看不懂 4 [root@ALS_Free ~]# line=$((`grep -n '\- Name:"AAA"' 1.sh|awk -F: '{print $1}'`+2));sed -i "$line i - Gender:"F"" 1.sh [root@ALS_Free ~]# cat 1.sh - Name:"AAA" - Age:"20" - Gender:F - Name:"BBB" - Age:"30" 楼主看看行吗 |
8
Arthur2e5 2015-11-02 06:46:02 +08:00
|