删除 shell 中的符号

发布于 2024-08-12 05:38:43 字数 256 浏览 5 评论 0原文

我是 shell 脚本新手,现在使用 csh ,假设我的配置文件中有一行,如下所示:

127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444

我想要的只是解析数组中的两个变量:

2222 3333 4444

和另一个

127.0.0.1 127.0.0.2 127.0.0.3

I'm new to shell scripting, right now using csh and let's say I have a line in my configuration file like this:

127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444

All I want is to parse it for two variables in array :

2222 3333 4444

And another one

127.0.0.1 127.0.0.2 127.0.0.3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柳若烟 2024-08-19 05:38:43

阅读“C Shell 编程被认为有害'。

如何在配置文件中获得正确的行?我假设文件中只有一行,但只要您可以识别该行,就有办法做到这一点。

set var1=`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`
set var2=`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`

第一个捕获点分十进制地址后面的“端口号”。第二个捕获地址。在每种情况下,结果都会分配给一个字符串,并用空格分隔值。


一些更多的手动攻击(在 MacOS X 10.5.8 上 - 'man csh' 打印 'tcsh' 页面)表明您可能会:

set arr1=(`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`)
set arr2=(`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`)

使用这种符号(反引号 sed 命令周围的括号),您创建数组,并且可以使用:(

echo $arr1[1]
echo $arr1[2]
echo $arr1[3]
echo $arr2[1]
echo $arr2[2]
echo $arr2[3]

假设样本数据)。手册页中注明这一点的部分用“(+)”标记了语法,这很可能意味着“标准 C shell 的扩展”,因此这是否适合您可能取决于您的环境。

Read 'C Shell Programming Considered Harmful'.

How do you get the right line in the configuration file? I'm about to assume there's just the one line in the file, but as long as you can identify the line, there are ways to do it.

set var1=`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`
set var2=`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`

The first captures the 'port numbers' after the dotted-decimal addresses. The second captures the addresses. In each case, the result is assigned to a string with spaces separating the values.


Some more manual bashing (on MacOS X 10.5.8 - 'man csh' prints the 'tcsh' page) suggests you might be after:

set arr1=(`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`)
set arr2=(`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`)

With this notation (the parentheses around the back-quoted sed command), you create arrays, and can use:

echo $arr1[1]
echo $arr1[2]
echo $arr1[3]
echo $arr2[1]
echo $arr2[2]
echo $arr2[3]

(assuming the sample data). The part of the manual page where this is noted marks the syntax with '(+)' which might well mean 'extension to standard C shell', so whether this works for you may depend on your environment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文