我在一个文件中有两行:
MUMBAI,918889986665,POSTPAID,CRBT123,CRBT,SYSTEM,151004,MONTHLY,160201,160302
MUMBAI,912398456781,POSTPAID,SEGP,SEGP30,SMS,151004,MONTHLY,160201,160302
我想在上面的行中剪切字段 2 和 4。条件是:从字段 2 中,我只需要十位数字。
期望的输出:
8889986665,CRBT
2398456781,SEGP30
我正在尝试以下命令:
cut -d',' -f2 test.txt | cut -c3-12 && cut -d',' -f4 test.txt
我的输出:
8889986665
2398456781
CRBT
SEGP30
请帮助我实现预期的输出。
最佳答案
解决方案 2: 这是将达到目的的解决方案:
剪切 -d',' -f2,4 1 | sed 's/.*\([0-9]\{10\}\),\(.*\)/\1,\2/'
8889986665,彩铃123
2398456781,SEGP
cut
将为我们提供第二个和第四个字段。- 在 sed 内部,
.*
跳过初始字符,直到遇到前面的第一个模式。 - 第一个模式是 10 位数字后跟一个分号:
\([0-9]\{10\}\),
- 第二个模式是该行的其余部分:
\(.*\)
- 现在我们打印两个模式,中间有分号:
\1,\2
请注意,数字 10
可以替换为要显示的字符数
在分隔符,
之前提取[0-9]
可以用.
代替,如果
这些字符可以是任何类型的字符。
解决方案一:
在这种情况下,使用 cut
对您来说是最简单的。
您首先需要从行中过滤出所需的字段 (2,4),然后进行更多过滤(字段 #2 中只有 10 个字符)
$ cut -d',' -f2,4 test.txt | cut -c3-
8889986665,CRBT123
2398456781,SEGP
关于linux - 获取一个字段的最后 n 个字符并在 Linux 中完成字符串的第二个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764769/