我有一行由逗号分隔的 3 个长数字。我想要做的是删除中间的数字,只留下由逗号分隔的第一个数字和最后一个数字。
现在:
123456789123,723456789123456,834567885544334
123456789125,723456789123457,834567885544333
123456789126,723456789123458,834567885544337
期望结果:
123456789123,834567885544334
123456789125,834567885544333
123456789126,834567885544337
我尝试这样做,但它不适用于这些正则表达式:
- 正则表达式来查找字符串:
%[0-9]+,[0-9]+,[0-9]+
- 正则表达式替换字符串:
^1,^2
哪个正则表达式实际上可以实现我想要实现的目标?
注意 - 我目前正在使用在 Windows 7 上运行的名为 Ultraedit 的应用程序,如果您推荐一个可以解决我的问题的更好的 Windows 文本编辑应用程序,请告诉我。
答案1
您可以简单地将每行的中间数字替换为空。
在编辑器中
也就是说,在你的编辑器中,搜索并替换正则表达式
,[0-9]+,
(仅匹配两边都有逗号的数字,对于您的输入来说只是中间的数字)带有一个逗号:
,
我假设 Ultraedit 支持正则表达式搜索和替换。如果不支持,请尝试 Notepad++,我知道它支持。
从命令行
由于您已标记了您的问题shell脚本,下面介绍如何从命令行执行此操作。
sed
使用sed
,这是标准的 Linux 命令,也可作为 Cygwin 或 GnuWin32 的一部分用于 Windows:
C:\>sed -e 's/,[0-9]+,/,/g' filename.txt
电源外壳
Jens 指出,你也可以在 Windows Powershell 中执行此操作;请参阅这个解释。
答案2
正则表达式语法因应用程序而异。我不熟悉 Ultredit,将给出一个通用答案
你的正则表达式缺少捕获括号
([0-9]+),[0-9]+,([0-9]+)
答案3
为了替换文本,需要使用括号标记正确的子表达式。
在 UltraEdit 中,您必须搜索以下正则表达式:
%^([0-9]+^),[0-9]+,^([0-9]+^)
答案4
与 Awk 等效!
echo "$Variable" | awk 'FS="," { print $1","$3 } '