哪个 UNIX 实用程序可以帮助我从文件中的一行中提取特定字符

发布于 2024-11-17 21:21:28 字数 262 浏览 1 评论 0原文

我有一个包含以下数据的文件 f1:

---
sc_swVersion_t isaPDAVersion = {0,4,0,0,0,34};
---

我想从中提取左大括号后的前 4 个字符。有人可以告诉我什么unix实用程序/shell命令可以做到这一点吗?说:

cat f1 | grep isaPDAVersion | < Some utility> gives me 0400

I have a file f1 containing following data:

---
sc_swVersion_t isaPDAVersion = {0,4,0,0,0,34};
---

from this I want to extract the first 4 characters after the opening brace. Can some one please advise what unix utility/shell command can do that. Say:

cat f1 | grep isaPDAVersion | < Some utility> gives me 0400

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

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

发布评论

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

评论(7

独夜无伴 2024-11-24 21:21:28
grep isaPDAVersion f1 | awk -F\{ '{print $2}'| awk -F, '{print $1$2$3$4}'

或者更简单地说是呆呆的

gawk  '/isaPDAVersion/ {match($4,"([[:digit:]]),([[:digit:]]),([[:digit:]]),([[:digit:]])",a); {print a[1]a[2]a[3]a[4]}}' f1
grep isaPDAVersion f1 | awk -F\{ '{print $2}'| awk -F, '{print $1$2$3$4}'

or more simply in gawk

gawk  '/isaPDAVersion/ {match($4,"([[:digit:]]),([[:digit:]]),([[:digit:]]),([[:digit:]])",a); {print a[1]a[2]a[3]a[4]}}' f1
层林尽染 2024-11-24 21:21:28

您可以使用 sed 完成这一切,例如

cat f1 | sed -ne "s/^.*isaPDAVersion[^{]*{\([^,]*,[^,]*,[^,]*,[^,]*\).*$/\1/p"

You can do it all with sed, e.g.

cat f1 | sed -ne "s/^.*isaPDAVersion[^{]*{\([^,]*,[^,]*,[^,]*,[^,]*\).*$/\1/p"
岛歌少女 2024-11-24 21:21:28
sed 's/[^{]*{//;       # discard up to and including the first {
     s/,//g;           # discard the commas
     s/\(....\).*/\1/  # get the first four characters, discard the rest
'
sed 's/[^{]*{//;       # discard up to and including the first {
     s/,//g;           # discard the commas
     s/\(....\).*/\1/  # get the first four characters, discard the rest
'
风蛊 2024-11-24 21:21:28

简短回答:

echo "sc_swVersion_t isaPDAVersion = {0,4,0,0,0,34};" | cut -f2 -d\{ | cut -f1-4 -d, | tr -d ,

将 echo 替换为“cat 文件名”,瞧。

Short answer:

echo "sc_swVersion_t isaPDAVersion = {0,4,0,0,0,34};" | cut -f2 -d\{ | cut -f1-4 -d, | tr -d ,

Replace the echo with a "cat filename" and voila.

暮色兮凉城 2024-11-24 21:21:28

恶心。只需使用 Perl 即可。

perl -nE's/\D//g,print for@{[split/,/]}[0..3]'

^ 无需滚动。

Yuck. Just use Perl.

perl -nE's/\D//g,print for@{[split/,/]}[0..3]'

^ No scrolling needed.

蘸点软妹酱 2024-11-24 21:21:28

您可以使用 sed 来做到这一点:

sed -n '/{/s/^.*{\([0-9]*\),\([0-9]*\),\([0-9]*\),\([0-9]*\).*$/\1\2\3\4/p' f1

You could do it with sed:

sed -n '/{/s/^.*{\([0-9]*\),\([0-9]*\),\([0-9]*\),\([0-9]*\).*$/\1\2\3\4/p' f1
桃酥萝莉 2024-11-24 21:21:28

GNU awk

gawk '
  match($0, /isaPDAVersion.*\{([^,]+),([^,]+),([^,]+),([^,]+),/, a) {
    printf("%s%s%s%s\n", a[1], a[2], a[3], a[4])
  }
' f1

GNU awk

gawk '
  match($0, /isaPDAVersion.*\{([^,]+),([^,]+),([^,]+),([^,]+),/, a) {
    printf("%s%s%s%s\n", a[1], a[2], a[3], a[4])
  }
' f1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文