未知命令`>'与sed

时间:2015-09-14 14:13:51

标签: bash sed

我一直在尝试通过sed命令并且未成功。

这是我正在尝试使用的sed命令;

a unknown command: <

我不断得到$VAR ......我知道为什么但是没有运气。单引号是可以的,但不显示sed值,只显示文字字符串。

对于不熟悉i的读者,这是一个正则表达式后跟"s%<Testing>%$VAR%"命令,而不是i替换的错误错误类型。 </Testing>命令在匹配行之前插入一个字符串。换句话说,当输入与 <asp:GridView ID="TestGrid" runat="server" AllowPaging="true" SkinID="GridViewNew" AllowSorting="False" OnRowDataBound="GridViewTest_RowDataBound" EnableViewState="True" OnRowUpdating="GridViewTest_OnRowUpdating" OnRowEditing="GridViewTest_OnRowEditing" OnRowCancelingEdit="GridViewTest_OnRowCancelingEdit" AutoGenerateColumns="False"> <Columns> <asp:CommandField ShowEditButton="True" CausesValidation="False" /> <asp:BoundField DataField="Client" HeaderText="Client" InsertVisible="False" ReadOnly="True" /> <asp:BoundField DataField="Stock" HeaderText="Stock" InsertVisible="False" ReadOnly="True" /> <asp:TemplateField HeaderText="DutyStatus" InsertVisible="False" > <ItemTemplate> <asp:Label ID="standLbl" runat="server"><%#Eval("DutyStatus").ToString().Trim() %></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DdlDutyStatus" runat="server" DataTextField="DutyStatus" DataValueField="DutyStatus"> </asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Percentage" InsertVisible="False" SortExpression="enhanced"> <ItemTemplate> <asp:Label ID="enhLbl" runat="server"><%#Eval("percentage").ToString().Trim() %></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="TbPercentage" runat="server" Text='<%#Eval("percentage").ToString().Trim()%>' class="edit-field"></asp:TextBox> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> 匹配时,我想添加一个描述匹配行之前的测试用例的片段。

2 个答案:

答案 0 :(得分:1)

如果$VAR包含换行符,则需要反斜杠 - 转义它。

vnix$ VAR=$'<hello>\n</hello>'

vnix$ sed "/<\/Testing>/i '<Tester>$VAR</Tester>'" <<<$'<Testing>\nmoo</Testing>\n(end)'
sed: -e expression #1, char 33: unknown command: `<'

vnix$ VAR=$'<hello>\\\n</hello>'

vnix$  sed "/<\/Testing>/i '<Tester>$VAR</Tester>'" <<<$'<Testing>\nmoo</Testing>\n(end)'
<Testing>
'<Tester><hello>
</hello></Tester>'
moo</Testing>
(end)

(我也猜测你实际上并不想要替换值附近的单引号,但这显然很容易修复。)

答案 1 :(得分:-2)

您需要指定某些命令,例如&#34; s&#34; (开头):

sed -i "s/</Testing>/i '$VAR'" filename

此外,如果您显示示例输入和输出

会更好