如何从Linux中的字符串中提取以用户定义的特殊字符开头和结尾的子字符串?

发布于 2024-11-28 08:28:06 字数 278 浏览 2 评论 0原文

我正在处理 Linux 脚本,想要从主字符串中提取子字符串,如下例所示:-

主字符串 =

2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#    

我需要的是:-

子字符串 =

13b11254    

我只是想读取并提取中间的任何内容 ^ ^ 特殊人物。

该代码将在 Linux 脚本中使用。

I am working on linux scripts and want to extract a substring out of a master string as in the following example :-

Master string =

2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#    

What I require is :-

Substring =

13b11254    

I simply want to read and extract whatever is there in between ^ ^ special characters.

This code will be used in a linux script.

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

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

发布评论

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

评论(4

橪书 2024-12-05 08:28:06

POSIX sh 兼容:

temp="${string#*^}"
printf "%s\n" "${temp%^*}"

假设每个字符串仅使用 ^ 2 次作为 2 个分隔符。

POSIX sh compatible:

temp="${string#*^}"
printf "%s\n" "${temp%^*}"

Assumes that ^ is only used 2x per string as the 2 delimiters.

Bonjour°[大白 2024-12-05 08:28:06

使用标准 shell参数扩展

% s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' ss=${s#*^} ss=${ss%^*}
% printf '%s\n' "$ss"                                                                  
13b11254

Using standard shell parameter expansion:

% s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' ss=${s#*^} ss=${ss%^*}
% printf '%s\n' "$ss"                                                                  
13b11254
佞臣 2024-12-05 08:28:06

下面的解决方案使用 cut 实用程序,它会生成一个进程,并且比 shell 参数扩展解决方案慢。它可能更容易理解,并且可以在文件上运行而不是在单个字符串上运行。

s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
echo $s | cut -d '^' -f 2

The solution bellow uses the cut utility, which spawns a process and is slower that the shell parameter expansion solution. It might be easier to understand, and can be run on a file instead of on a single string.

s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
echo $s | cut -d '^' -f 2
浪漫之都 2024-12-05 08:28:06

您还可以使用 bash 数组和字段分隔符:

IFS="^"
s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
array=($s)
echo ${array[1]}

这允许您测试是否有 2 个分隔符:

if [ ${#array[*]} -ne 3 ]
then
  echo error
else
  echo ok
fi

You can also use bash arrays and field separator:

IFS="^"
s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
array=($s)
echo ${array[1]}

This allows you to test is you have exactly 2 separators:

if [ ${#array[*]} -ne 3 ]
then
  echo error
else
  echo ok
fi
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文