小编Jac*_*ack的帖子

使用awk/sed解析这个特定字符串的最佳方法?

我需要从文件中获取特定的版本字符串(称之为version.lst)并使用它来比较shell脚本中的另一个.例如,该文件包含如下所示的行:

V1.000 -- build date and other info here -- APP1
V1.000 -- build date and other info here -- APP2
V1.500 -- build date and other info here -- APP3
Run Code Online (Sandbox Code Playgroud)

.. 等等.假设我试图从APP1获取第一个版本(在本例中为V1.000).显然,版本可以改变,我希望它是动态的.我现在所做的工作:

var = `cat version.lst | grep " -- APP1" | grep -Eo V[0-9].[0-9]{3}`
Run Code Online (Sandbox Code Playgroud)

管道到grep将获得包含APP1的行,第二个管道到grep将获得版本字符串.但是,我听说grep不是这样做的,所以我想学习使用awk或sed的最佳方法.有任何想法吗?我是两个新手,并没有找到足够简单的教程来学习它的语法.他们支持egrep吗?谢谢!

awk grep sed

6
推荐指数
1
解决办法
2万
查看次数

当产品ID为*时,在WiX中卸载快捷方式以允许重大升级?

我在这里按照教程开始菜单中实现卸载快捷方式.

简而言之,创建卸载条目的方法如下:

 <Shortcut Id="UninstallProduct"             
           Name="Uninstall My Application"
           Target="[SystemFolder]msiexec.exe"
           Arguments="/x [ProductCode]"
           Description="Uninstalls My Application" />
Run Code Online (Sandbox Code Playgroud)

根据罗布Mensching的建议在这里,如果应用程序是足够小,你不需要处理小更新和次要升级(我不),你可以强制每次更新是一个重大的升级.这在这里显示.我用Rob的建议是这样的:

<Product Id="*" UpgradeCode="PUT-GUID-HERE" Version="$(var.ProductVersion)">
 <Upgrade Id="PUT-GUID-HERE">
    <UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" />
    <UpgradeVersion OnlyDetect="no" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" />
</Upgrade>

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果产品ID是随机的(*)以允许进行重大升级,是否有其他方法可以将卸载快捷方式添加到开始菜单,还是我们必须通过添加/删除程序来实现?我更喜欢在开始菜单中创建快捷方式,因为它对用户来说更容易.显然它现在的方式,它将无法工作,因为msiexec参数中使用的[ProductCode]将在每次安装时更改.谢谢.

wix uninstall upgrade

6
推荐指数
1
解决办法
2015
查看次数

处理多个recv()调用和所有可能的场景

我是C的新手并编写TCP服务器,并且想知道如何从发送服务器将响应的命令的客户端处理recv().为了这个问题,我们只说头是第1个字节,命令标识符是第2个字节,有效载荷长度是第3个字节,然后是有效载荷(如果有的话).

recv()这些数据的最佳方法是什么?我想调用的recv()在第3个字节到缓冲区中读取,检查以确保标题和指令标识符有效,然后检查有效载荷长度与有效载荷长度的长度再次调用的recv(),这增加了回到前面提到的缓冲区.阅读Beej的网络文章(尤其是本节在这里:http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#sonofdataencap),然而,他建议用"足够大的数组两[最大"数据包"处理诸如获取下一个数据包之类的情况.

处理这些类型的recv()的最佳方法是什么?基本的问题,但我想高效地实现它,处理可能出现的所有情况.提前致谢.

c networking tcp recv

5
推荐指数
2
解决办法
1万
查看次数

C90:如何在没有C99扩展的情况下在C中全局初始化此结构

我想知道用C90初始化这个结构的最好方法是什么,同时仍保持整洁.

在我的头文件中,将其命名为test.h,我定义了以下结构:

 struct s_test_cfg{
      char *a[3];
      char *b[3];
      char *c[3];
 }
Run Code Online (Sandbox Code Playgroud)

然后我将它声明为extern结构,以便我可以在.c文件中全局初始化它:

 extern struct s_test_cfg test_cfg;
Run Code Online (Sandbox Code Playgroud)

现在在我的.c文件中,我希望能够在全局范围内声明这样的东西(很明显我要编写的内容在C90中不受支持):

 struct s_test_cfg test_cfg =
 { .a = {"a", "b", "c"},\
   .b = {"d", "e", "f"},\
   .c = {"g", "h", "i"} };
Run Code Online (Sandbox Code Playgroud)

这显然使你对你想要做的事情非常整洁和透明.如何初始化我的C文件中的全局结构,该结构也像这种语法一样干净?谢谢.

c struct global declare c89

3
推荐指数
1
解决办法
7443
查看次数

标签 统计

c ×2

awk ×1

c89 ×1

declare ×1

global ×1

grep ×1

networking ×1

recv ×1

sed ×1

struct ×1

tcp ×1

uninstall ×1

upgrade ×1

wix ×1